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