如何使用Python将文本插入表单控件/下拉列表来解决此错误?
我正试图使用如何使用Python将文本插入表单控件/下拉列表来解决此错误?,python,selenium,Python,Selenium,我正试图使用Firefox在Python中完成我的第一个网页抓取项目。我使用的是pythonversion3.7.4和firefoxdeveloper71。两者都是64位的,我使用的是windows10 问题是试图通过python访问此表单控件。最后,我希望将文本插入表单控件,然后通过web刮取结果。然而,我现在只是想点击这个对象,因为它很难得到 这是我的密码: from selenium import webdriver from selenium.webdriver.common.actio
Firefox
在Python
中完成我的第一个网页抓取项目。我使用的是pythonversion3.7.4
和firefoxdeveloper71
。两者都是64位的,我使用的是windows10
问题是试图通过python
访问此表单控件。最后,我希望将文本插入表单控件,然后通过web刮取结果。然而,我现在只是想点击这个对象,因为它很难得到
这是我的密码:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
import time
driver = webdriver.Firefox()
driver.get("https://www.website.com/login/")
jcode_form = driver.find_element_by_id('ndcCode')
hov = ActionChains(driver).move_to_element(jcode_form)
time.sleep(6)
hov.click()
hov.perform()
我收到的错误是:
WebDriverException:消息:类型错误:未定义rect
我尝试使用的对象是顶部的表单控件
我曾尝试使用动作链和睡眠功能以多种方式对此进行故障排除,但我一直收到一条错误消息
如有任何帮助或建议,将不胜感激。
谢谢。以下可能会解决此问题:
jcode_form = driver.find_element_by_id('ndcCode')
jcode_form.click()
或者在一行中:
driver.find_element_by_id('ndcCode').click()
以下可能会解决这个问题:
jcode_form = driver.find_element_by_id('ndcCode')
jcode_form.click()
或者在一行中:
driver.find_element_by_id('ndcCode').click()
这里我会尝试一些不同的方法,包括
send_keys()
、Javascript或两者的组合。首先,我想将您的定位器修改为更独特的内容—IDndcCode
可能会在页面上被多次使用,也可能不会被多次使用,如果我们找到多个元素,那么这将引发意外的结果。您可以通过以下方式进行验证:
elements_count = driver.find_elements_by_id("ndcCode")
print(str(len(elements_count))
如果“1”未打印,则定位器策略需要更新为更具体的内容。无论如何,我将对以下代码示例使用更新的策略
第一种方法是简单的单击()
,然后是发送密钥()
:
这是最基本的方法,但最好先排除这种可能性。接下来,我将尝试Javascript方法,以执行相同的操作:
jcode_form = driver.find_element_by_xpath("//input[contains(@placeholder, 'Start typing a Code, Drug, Product')]")
driver.execute_script("arguments[0].click();", jcode_form) # perform click
driver.execute_script("arguments[0].value = 'someText';", jcode_form) # set the value
我很想在尝试了这两个代码示例之后听到您的结果。如果他们不适合你,请随意评论这个答案,并告诉我你遇到的任何错误。如果可能的话,我希望看到您正在测试的URL,这样我就可以尝试调试和测试这些代码示例。这里我会尝试一些不同的东西,包括
send_keys()
、Javascript或两者的组合。首先,我想将您的定位器修改为更独特的内容—IDndcCode
可能会在页面上被多次使用,也可能不会被多次使用,如果我们找到多个元素,那么这将引发意外的结果。您可以通过以下方式进行验证:
elements_count = driver.find_elements_by_id("ndcCode")
print(str(len(elements_count))
如果“1”未打印,则定位器策略需要更新为更具体的内容。无论如何,我将对以下代码示例使用更新的策略
第一种方法是简单的单击()
,然后是发送密钥()
:
这是最基本的方法,但最好先排除这种可能性。接下来,我将尝试Javascript方法,以执行相同的操作:
jcode_form = driver.find_element_by_xpath("//input[contains(@placeholder, 'Start typing a Code, Drug, Product')]")
driver.execute_script("arguments[0].click();", jcode_form) # perform click
driver.execute_script("arguments[0].value = 'someText';", jcode_form) # set the value
我很想在尝试了这两个代码示例之后听到您的结果。如果他们不适合你,请随意评论这个答案,并告诉我你遇到的任何错误。如果可能的话,我希望看到您正在测试的URL,以便我可以尝试调试和测试这些代码示例。哪行代码导致了此错误?您能发布完整的堆栈跟踪吗?始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)放在问题中(不是注释)。还有其他有用的信息。您应该为此页面添加url,以便我们可以查看其HTML和测试代码。您的url引发错误:
HTTP 404-未找到文件
哪一行代码导致此错误?您能发布完整的堆栈跟踪吗?始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)放在问题中(不是注释)。还有其他有用的信息。您应该为此页面添加url,以便我们可以查看其HTML和测试代码。您的url引发错误:HTTP 404-未找到文件