为了进一步了解Python、Selenium、Beautifulsoup和webscraping,我开始了一个小型的个人项目,最终应该能够打开网页的主屏幕,导航到搜索字段,并输入和搜索特定的帐号
目前,我已经成功地使用Selenium打开站点主页,然后导航到包含我需要填写的表单的页面。我通过使用Chromes developer工具复制我需要点击的区域的xpath,然后将其输入Selenium的“find element”和“click”函数来实现这一点
我遇到的问题是,当输入到代码中时,我试图点击的特定字段的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_元素”来更好地让代码工作
如果有帮助,我尝试单击的字段是此网站上的“帐户”字段: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几乎一无所知(因此是lame starter项目),因此如果您认为有更好的方法来实现这一点,那么我会喜欢指南
谢谢!
您没有将帐号发送到文本字段,请尝试此操作
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[2]/td[2]/input').send_keys('account_no')
send_键用于将输入发送到textfield 及
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[11]/td/input[1]').click()
点击搜索按钮
帐户字段位于
<frame>
内,因此您必须:您可以使用以下任一Locator Strategies:
使用
CSS_SELECTOR
:使用
XPATH
:注意:您必须添加以下导入:
浏览器快照:
参考文献
您可以在以下内容中找到一些相关讨论:
您面临的问题是,要访问的表单驻留在iFrame中。您必须特别告诉selenium切换到iFrame。你可以这样做
另外,查找您正在查找的输入的一种更简单的方法是使用
find_element_by_name
。如果您检查您试图刮取的网站的HTML代码,则要访问的input field
具有值为Master__Account
的name
属性。您可以使用它来访问输入相关问题 更多 >
编程相关推荐