python - 我需要帮助确定与 Selenium 一起使用的 Web 表单字段
问题描述
为了更多地了解 Python、Selenium、Beautifulsoup 和一般的网页抓取,我开始了一个小型个人项目,该项目最终应该能够打开网页的主屏幕,导航到搜索字段,然后输入和搜索特定帐户数字。
目前我已经成功地使用 Selenium 打开网站主页,然后导航到包含我需要填写的表单的页面。我通过使用 Chromes 开发工具复制我需要单击的区域的 xpath,然后将其输入到 Selenium 的“查找元素”和“单击”功能中来做到这一点。
我遇到的问题是,当我尝试点击的特定字段的 xpath 输入到我的代码中时,会吐出以下错误
Traceback (most recent call last):
File "C:/Users/WFrazierIII/PycharmProjects/Selenium Prcatice/Selenium Practice File.py", line 24, in <module>
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[2]/td[2]/input').click()
File "C:\Users\WFrazierIII\PycharmProjects\Selenium Prcatice\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Users\WFrazierIII\PycharmProjects\Selenium Prcatice\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Users\WFrazierIII\PycharmProjects\Selenium Prcatice\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\WFrazierIII\PycharmProjects\Selenium Prcatice\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/form/table/tbody/tr[2]/td[2]/input"}
(Session info: chrome=83.0.4103.97)
Process finished with exit code 1
我的问题是,我应该努力为这个字段找到合适的 xpath,还是应该尝试使用不同的“find_element”来更好地让我的代码工作。
如果有帮助,我尝试单击的字段是本网站上的“帐户”字段:https ://www.alabamagis.com/Tallapoosa/frameset.cfm?cfid=3986761&cftoken=54089502
到目前为止,这是我当前的代码:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located
driver = webdriver.Chrome('C:\WebDriver\chromedriver.exe')
driver.get('https://www.alabamagis.com/Tallapoosa/')
driver.find_element_by_xpath('/html/body/center/font[2]/a').click()
time.sleep(6)
driver.find_element_by_xpath('/html/body/font/a[1]').click()
time.sleep(6)
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[2]/td[2]/input').click()
最后,我将补充一点,我对 Python 或 Selenium 知之甚少,对 HTML 几乎一无所知(因此是蹩脚的入门项目),所以如果你认为有更好的方法来解决这个问题,那么我会喜欢这个指导。
感谢!
解决方案
您面临的问题是您要访问的表单位于 iFrame 中。您必须明确告诉 selenium 切换到 iFrame。你可以这样做。
driver = webdriver.Chrome('./chromedriver')
driver.get('https://www.alabamagis.com/Tallapoosa/')
driver.find_element_by_xpath('/html/body/center/font[2]/a').click()
time.sleep(6)
driver.find_element_by_xpath('/html/body/font/a[1]').click()
time.sleep(6)
# new code starts here
driver.switch_to.frame('searchFrame')
driver.find_element_by_name('Master__Account').send_keys('your desired input')
此外,查找所需输入的更简单方法是使用find_element_by_name
. 如果您检查您尝试抓取的网站的 HTML 代码,则input field
您要访问的name
属性具有 value Master__Account
。您可以使用它来访问输入。
推荐阅读
- r - R Shiny plot透明背景:低分辨率(轴文本和标签周围的白色像素,以及标题)
- reporting-services - SSRS - 将分组数据放在同一行
- excel - SharePoint 公式:[已创建]+60 天 = 延期日期(但需要是工作日)
- powerbi - PowerBI 中选项卡/页面的基于角色的安全性(不是行级安全性)
- python - 以 x 的倍数从 200 倒计时到 0。X 是用户输入的值(python)
- c# - 发送带有附件的加密电子邮件
- elasticsearch - 我们可以从弹性搜索查询响应中删除数据跟踪吗
- javascript - 开玩笑/反应 - 类型错误:无法读取未定义的属性“touchStart”
- node.js - 使用 App Script 或 Node JS 将列式数据堆叠成行
- javascript - 如何检查对象中的值是否是原始值?