首页 > 解决方案 > 如何单击 Selenium 中的弹出窗口?

问题描述

我正在使用Selenium自动执行 Web 任务,并且正在尝试搜索地址。一旦我搜索一个地址,就会出现一个弹出窗口,上面写着“你是说_____地址”,我想点击那个弹出窗口。

在此处输入图像描述

您可以看到我使用 输入了 Stanford Selenium,我希望单击“您的意思是?”中弹出的第一个结果。盒子。但是,我无法点击该 webbrowser 元素。

我正在使用SeleniumPython。

我尝试使用 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( . )调用上面的那个字符串对我不起作用。

有什么建议吗?

提前致谢!

标签: javascriptpythonhtmlselenium

解决方案


这可能是因为元素没有被正确渲染,你试图点击它/与之交互,导致异常。

请诱导显式等待,由 WebDriverWait 实现。

xpath 也很脆弱,因为它是绝对 xpath。请使用这样的相对 xpath:

//ul[@class='disambiguation']//li[addr]

在使用之前,您应该确保它应该反映为1/11/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

推荐阅读