javascript - 如何单击 Selenium 中的弹出窗口?
问题描述
我正在使用Selenium
自动执行 Web 任务,并且正在尝试搜索地址。一旦我搜索一个地址,就会出现一个弹出窗口,上面写着“你是说_____地址”,我想点击那个弹出窗口。
您可以看到我使用 输入了 Stanford Selenium
,我希望单击“您的意思是?”中弹出的第一个结果。盒子。但是,我无法点击该 webbrowser 元素。
我正在使用Selenium
Python。
我尝试使用 XPath helper chrome 扩展,它允许我确定该特定元素的 XPath 是
/html/body[@class='vsc-initialized']/form[@id='Form1']/div[@class='stickywrapper']/div[@class='tier3']/table[@class='map-container']/tbody/tr/td/div[@class='css_container']/div[@id='m_upSearch']/div[@id='m_pnlSearchTab']/div[@id='m_pnlSearch']/div[@class='css_content'][1]/div[@id='m_sfcSearch']/div[@class='searchForm']/table/tbody/tr[2]/td/table/tbody/tr[2]/td[1]/table/tbody/tr[12]/td[2]/table/tbody/tr[2]/td[2]/div/div[@class='mapSearchDialog']/ul[@class='disambiguation']/li[2]
但是,尝试driver.find_elements_by_xpath( . )
调用上面的那个字符串对我不起作用。
有什么建议吗?
提前致谢!
解决方案
这可能是因为元素没有被正确渲染,你试图点击它/与之交互,导致异常。
请诱导显式等待,由 WebDriverWait 实现。
xpath 也很脆弱,因为它是绝对 xpath。请使用这样的相对 xpath:
//ul[@class='disambiguation']//li[addr]
在使用之前,您应该确保它应该反映为1/1
或1/any_number
。但它必须是左侧的 1。
检查步骤:
Press F12 in Chrome
-> 转到element
部分 -> 执行CTRL + F
-> 然后粘贴xpath
并查看,如果您想要element
的是否使用匹配节点突出显示。1/1
代码试用1:
time.sleep(5)
driver.find_element_by_xpath("//ul[@class='disambiguation']//li[addr]").click()
代码试用2:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='disambiguation']//li[addr]"))).click()
代码试用3:
time.sleep(5)
button = driver.find_element_by_xpath("//ul[@class='disambiguation']//li[addr]")
driver.execute_script("arguments[0].click();", button)
代码试用4:
time.sleep(5)
button = driver.find_element_by_xpath("//ul[@class='disambiguation']//li[addr]")
ActionChains(driver).move_to_element(button).click().perform()
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
推荐阅读
- pandas - 如何根据条件将月数据转换为 nan?
- mysql - 使用 Flutter 连接数据库时出现问题
- windows - host=$decideOnStartup 在 Windows EC2 上的 splunk 配置中不起作用
- entity-framework - 如果存在子视图,如何使用产品实体
- reactjs - React Admin dataProvider 在创建期间未发送 id
- php - 插入数据库后发送电子邮件
- docker - WSO2 API 数据持久性问题
- excel - 工作表更改事件未触发?
- image - 将移动图库中的图像路径存储到 SQLite 数据库中
- perl - Perl函数用于对数字的增加和减少量求和