Поиск в Google с помощью Selenium и Python

#python #selenium

#python #selenium

Вопрос:

Я не могу выполнить простой поиск в Google с помощью 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/' amp;amp; '/usr/bin/pythonw'  '/Users/markkowalsky/Desktop/searchGoogle.py'  amp;amp; echo Exit status: $? amp;amp; 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
  

Если вам нужна какая-либо другая информация, я с радостью поделюсь. Заранее благодарю вас.

Комментарии:

1. У вас есть ошибка IndentationError в вашем блоке finally. За исключением этого, я согласен с сутью того, что написал Падрайк Каннингем.

Ответ №1:

Ваш finally блок будет выполнен независимо от того, было исключение или нет. Всегда выполняется So 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()
  

Документы selenium по `waits.

Комментарии:

1. Я бы не стал вызывать browser.quit() сразу после отображения результатов. Но, конечно, это зависит от того, чего пользователь3810035 собирается достичь с помощью этого скрипта.

2. @Sebastian, это всего лишь пример того, как искать и использовать sleep для ожидания между вызовами.

3. quit() отсутствует в finally как без отступа. Тем не менее, он выполняется, если не возникает исключения.

Ответ №2:

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, чтобы ознакомиться с ним самостоятельно.