Python 单击按钮并用Selenium和PhantomJS填充表单

Python 单击按钮并用Selenium和PhantomJS填充表单,python,selenium,automation,phantomjs,Python,Selenium,Automation,Phantomjs,我有一个简单的任务,我想自动化。我想打开一个URL,点击一个按钮进入下一页,填写搜索词,点击“搜索”按钮,打印出结果页的URL和源代码。我写了以下内容 from selenium import webdriver import time driver = webdriver.PhantomJS() driver.set_window_size(1120, 550) #open URL driver.get("https://www.searchiqs.com/nybro/") time.sl

我有一个简单的任务,我想自动化。我想打开一个URL,点击一个按钮进入下一页,填写搜索词,点击“搜索”按钮,打印出结果页的URL和源代码。我写了以下内容

from selenium import webdriver
import time

driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)

#open URL
driver.get("https://www.searchiqs.com/nybro/")
time.sleep(5)

#click Log In as Guest button
driver.find_element_by_id('btnGuestLogin').click()
time.sleep(5)

#insert search term into Party 1 form field and then search
driver.find_element_by_id('ContentPlaceholder1_txtName').send_keys("Moses")
driver.find_element_by_id('ContentPlaceholder1_cmdSearch').click()
time.sleep(10)

#print and source code
print driver.current_url
print driver.page_source
driver.quit()
我不确定哪里出了问题,但我已经学习了一些关于如何点击按钮和填写表单的教程。我得到了这个错误

Traceback (most recent call last):                                                                                                                                              
  File "phant.py", line 12, in <module>                                                                                                                                         
    driver.find_element_by_id('btnGuestLogin').click()                                                                                                                          
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 269, 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 752, in find_element                                                               
    'value': value})['value']                                                                                                                                                   
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute                                                                    
    self.error_handler.check_response(response)                                                                                                                                 
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response                                                          
    raise exception_class(message, screen, stacktrace)                                                                                                                          
selenium.common.exceptions.NoSuchElementException: Message: {"errorMessage":"Unable to find element with id 'btnGuestLogin'","request":{"headers":{"Accept":"application/json","
Accept-Encoding":"identity","Connection":"close","Content-Length":"94","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:35670","User-Agent":"Python-urllib/2.7"
},"httpVersion":"1.1","method":"POST","post":"{\"using\": \"id\", \"sessionId\": \"d38e5fa0-5349-11e6-b0c2-758ad3d2c65e\", \"value\": \"btnGuestLogin\"}","url":"/element","urlP
arsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userInfo":"","authority":""
,"protocol":"","source":"/element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/d38e5fa0-5349-11e6-b0c2-758ad3d2c65e/element"}}                                  
Screenshot: available via screen
它仍然会引起这个错误

Traceback (most recent call last):                                                                                                                                              
  File "phant.py", line 14, in <module>                                                                                                                                         
    EC.presence_of_element_located((By.ID, "btnGuestLogin"))                                                                                                                    
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/support/wait.py", line 80, in until                                                                           
    raise TimeoutException(message, screen, stacktrace)                                                                                                                         
selenium.common.exceptions.TimeoutException: Message:                                                                                                                           
Screenshot: available via screen
回溯(最近一次呼叫最后一次):
文件“phant.py”,第14行,在
EC.元素的存在位置((By.ID,“btnGuestLogin”))
文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/support/wait.py”,第80行,直到
引发TimeoutException(消息、屏幕、堆栈跟踪)
selenium.common.Exception.TimeoutException:消息:
屏幕截图:可通过屏幕

WebDriverWait方法实际上对我很有效:

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()
driver.set_window_size(1120, 550)

driver.get("https://www.searchiqs.com/nybro/")

element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "btnGuestLogin"))
        )
element.click()
没有错误。PhantomJS版本2.1.1、Selenium 2.53.6、Python 2.7


该问题可能与SSL和PhantomJS有关,或者通过
http

driver.get("http://www.searchiqs.com/nybro/")
或者,试试:


看看周围是否有任何框架…或者需要实现
WebDriverWait
以等待元素可见并可单击,而不是
时间。sleep
…)@SaurabhGaur,我已经进行了编辑,您可以使用新的备选脚本在文章底部看到它们。我仍然得到错误,那帧呢??。。。确保
btnGuestLogin
不在任何框架或iframe@SaurabhGaur,它不在框架内。我检查了页面源,没有框架。@TendekaiMuchenje好的,打印页面源,你得到了什么
print(driver.page\u source)
。如果我在执行
driver.get()
之后将其正确放置,它会打印出
,之后的任何位置都会导致error@TendekaiMuchenje好的,看你有空的页面来源。尝试添加
'--ssl protocol=any'
参数,并更新答案。我仍然得到相同的错误。我不知道为什么。我把“www.google.com”作为我的网站,它仍然给了我空页面的来源。它成功了!谢谢你的帮助!
driver.get("http://www.searchiqs.com/nybro/")
driver = webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any'])