3

随着PhantomJS和硒我的Ubuntu机器上的所有安装先决条件我运行下面的代码片段:异常的执行PhantomJS +硒的webdriver + Python程序

from selenium import webdriver 

driver = webdriver.PhantomJS() 
driver.set_window_size(1120, 550) 
driver.get("https://duckduckgo.com/") 
driver.find_element_by_id('search_form_input_homepage').send_keys("realpython") 
driver.find_element_by_id("search_button_homepage").click() 
print driver.current_url 
driver.quit() 

在执行时我得到以下错误:

$ python duck.py 
Traceback (most recent call last): 
    File "duck.py", line 5, in <module> 
    driver.find_element_by_id('search_form_input_homepage').send_keys("realpython") 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 208, in find_element_by_id 
    return self.find_element(by=By.ID, value=id_) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 664, in find_element 
    {'using': by, 'value': value})['value'] 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 175, in execute 
    self.error_handler.check_response(response) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 166, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.NoSuchElementException: Message: Error Message => 'Unable to find element with id 'search_form_input_homepage'' 
caused by Request => {"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"107","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:50789","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"using\": \"id\", \"sessionId\": \"26560250-fec9-11e4-b2ee-2dada5838664\", \"value\": \"search_form_input_homepage\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/26560250-fec9-11e4-b2ee-2dada5838664/element"} 
Screenshot: available via screen 

回答

0

我想你最近发生的事情是你试图找到一个尚未加载在页面上的元素。所以我可以推荐在你尝试输入搜索字段之前插入一个WaitForElementDisplayed(by.ID("search_form_input_homepage"));。因此,在尝试与之交互之前,您一定会确定该元素在那里。

我真的不能给你一个代码示例,因为我不太熟悉Python绑定。

+0

它没有帮助。 – alecxe

+0

以及异常情况说的是元素不存在,或者我们使用错误的标识符来查找它。现在,假设我们的标识符是正确的,剩下的是另一个选项,那个元素还没有。 只是尝试可以插入Thread.Sleep(5000)页面加载时,并尝试输入之前。这会在下一次互动之前等待5秒钟。 –

+0

不,问题是该页面甚至没有在PhantomJS中加载。 – alecxe

2

设置--ssl-protocol=any service argument和使用Explicit Waits使其为我工作:

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 


driver = webdriver.PhantomJS(service_args=['--ssl-protocol=any']) 

driver.maximize_window() 
driver.get("https://duckduckgo.com/") 

wait = WebDriverWait(driver, 10) 
search = wait.until(EC.presence_of_element_located((By.ID, "search_form_input_homepage"))) 
search.send_keys("realpython") 
driver.find_element_by_id("search_button_homepage").click() 

print driver.current_url 
driver.quit() 

打印https://duckduckgo.com/?q=realpython

请注意,如果没有--ssl-protocol=any PhantomJS甚至没有加载页面,当前网址保持为about:blank