用Selenium和Python搜索Google

9 投票
2 回答
36522 浏览
提问于 2025-04-18 12:17

我在用Selenium做一个简单的谷歌搜索时遇到了问题,感觉自己应该是对的,但就是不行。我试着按照Selenium的说明来操作,但我觉得可能是因为我的Python或者Selenium安装得不太对。其实我对Python的了解不多。以下是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 

browser = webdriver.Firefox()
browser.get('http://www.google.com')

try:
    element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "gbqfq")))
finally:
browser.quit()

search = browser.find_element_by_name('q')
search.send_keys("google search through python")

这是终端输出的内容。

 Mark-Kowalskys-iMac:~ markkowalsky$ cd '/Users/markkowalsky/Desktop/' && '/usr/bin/pythonw'  '/Users/markkowalsky/Desktop/searchGoogle.py'  && echo Exit status: $? && exit 1
Traceback (most recent call last):
  File "/Users/markkowalsky/Desktop/searchGoogle.py", line 14, in <module>
search = browser.find_element_by_name('q')
  File "/Library/Python/2.6/site-packages/selenium/webdriver/remote/webdriver.py", line 302, in find_element_by_name
return self.find_element(by=By.NAME, value=name)
  File "/Library/Python/2.6/site-packages/selenium/webdriver/remote/webdriver.py", line 662, in find_element
{'using': by, 'value': value})['value']
  File "/Library/Python/2.6/site-packages/selenium/webdriver/remote/webdriver.py", line 171, in execute
response = self.command_executor.execute(driver_command, params)
  File "/Library/Python/2.6/site-packages/selenium/webdriver/remote/remote_connection.py", line 347, in execute
return self._request(command_info[0], url, body=data)
  File "/Library/Python/2.6/site-packages/selenium/webdriver/remote/remote_connection.py", line 377, in _request
self._conn.request(method, parsed_url.path, body, headers)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 874, in request
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 911, in _send_request
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 868, in endheaders
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 740, in _send_output
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 699, in send
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 683, in connect
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection
socket.error: [Errno 61] Connection refused

如果你需要其他信息,我很乐意分享。提前谢谢你。

2 个回答

0

driver.quit() 这个命令会在执行到这里的时候结束当前的会话。你可以试试这个:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 

browser = webdriver.Firefox()
browser.get('http://www.google.com')

WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "gbqfq")))

search = browser.find_element_by_name('q')
search.send_keys("google search through python")

browser.quit()

你提到你对Python了解不多。也许你可以考虑选择一个你已经熟悉的编程语言,或者先看一些Python的教程,帮助自己熟悉一下这个语言。

22

无论有没有出现错误,你的 finally 代码块都会被执行。所以 browser.quit() 这行代码总是会被执行。

如果你只是想搜索,这段脚本可以帮你做到。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
browser.get('http://www.google.com')

search = browser.find_element_by_name('q')
search.send_keys("google search through python")
search.send_keys(Keys.RETURN) # hit return after you enter search text
time.sleep(5) # sleep for 5 seconds so you can see the results
browser.quit()

关于 `waits` 的详细信息,可以查看 selenium 文档

撰写回答