我正在开发一个程序,可以自动登录到某个网页,并单击某些按钮和链接,以到达最终目的地,输入某些值并提交它们。我已经设法浏览了网页,但其中一个网页有一个超链接按钮,我需要Selenium来单击,然而,在尝试了多种不同的方法之后,我无法让它工作。
我尝试过用By.XPATH
、By.LINK_TEXT
、By.PARTIAL_LINK_TEXT
找到元素,但这些都没有用。我想我的问题可能是因为它是点击一个全新的URL,所以我将新的URL加载到代码的底部,然后继续我的程序。
超链接按钮:按钮
我试图单击的超链接按钮的代码块:
XPath本身是:/html/body/div[2]/table/tbody/tr/td[2]/p/span/a[2]
driver = webdriver.Chrome(executable_path='C:\chromedriver.exe')
driver.get('')
'''
username_input = '//*[@id="userNameInput"]'
password_input = '//*[@id="passwordInput"]'
submit_button = '//*[@id="submitButton"]'
send_push = '//*[@id="auth_methods"]/fieldset/div[1]/button'
'''
# enters username and password into fields
driver.find_element("xpath", '//*[@id="userNameInput"]').click()
driver.find_element("xpath", '//*[@id="userNameInput"]').send_keys(username)
driver.find_element("xpath", '//*[@id="passwordInput"]').click()
driver.find_element("xpath", '//*[@id="passwordInput"]').send_keys(password)
driver.find_element("xpath", '//*[@id="submitButton"]').click()
# clicks 'send me a push' button on duo mobile screen
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='duo_iframe']")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(("xpath", "//button[normalize-space()='Send Me a Push']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(("xpath", '//*[@id="p_p_id_56_INSTANCE_xWhKj4tIFYvm_"]/div/div/div[1]/a[5]'))).click()
# loads next url which has the link on its webpage that needs to be clicked
driver.get('')
# attempts to click on link
driver.find_element("xpath", '/html/body/div[2]/table/tbody/tr/td[2]/p/span/a[2]').click()
我已经删除了driver.get('')
中的URL,因为它们包含敏感URL。
最后一行代码是尝试使用XPath单击超链接。
任何帮助都是非常感谢的!
编辑:
经过进一步研究,我现在看到两个按钮的元素中都有相同的类名:
站点地图按钮:站点地图
学生按钮:学生
发布于 2022-08-10 16:59:30
我假设find_element
没有返回正确的元素,因此不能单击。或者您可以通过将.click()
更改为.text
来验证它。如果它返回SITE MAP
,那么它返回一个正确的元素。
如果你能尝试的话,我有另一个解决办法。它使用xpath
,并假定class='pageheaderlink'
是HTML中的单个元素。
list_subcontent = driver.find_elements_by_xpath(".//span[@class='pageheaderlink']")
for item in list_subcontent:
if item.text == 'SITE MAP':
item.click()
发布于 2022-08-10 19:45:30
考虑到HTML:
文本为站点映射的元素是<a>
标记和动态元素。要单击可单击的元素,需要为https://stackoverflow.com/a/54194511/7429447诱导WebDriverWait,可以使用以下任何一个https://stackoverflow.com/a/48056120/7429447
https://stackoverflow.com/questions/73309906
复制相似问题