从Selenium的Javascript弹出窗口中获取元素

时间:2017-04-27 20:29:21

标签: python python-2.7 selenium selenium-webdriver

我正在使用Selenium从在线数据库中搜索结果。但是,一旦我选择了我的结果并导出它们,就会出现一个弹出窗口。通常我只是将框架切换到此窗口,但它似乎是生成javascript。虽然此弹出窗口中有元素,但具体名称不断变化。例如,有一个submitButton id标记。但是,它总是附加一个不同的结尾。因此,例如它将是id =“submitButton_15bb0b69431”,但下次它将是完全不同的东西,例如id =“submitButton_15bb0c03e8e”。因此,我通过ID或CSS或XPATH查找的常规方法不起作用。

如何处理此窗口以选择我需要的元素?我可能以某种方式得到弹出窗口的页面源吗?

我到目前为止的代码如下:

for i in listofpa:
try:
    driver.find_element_by_xpath(i).click()

    driver.find_element_by_css_selector('#mainContentRight > div.pagination > ul > li:nth-child(13) > a').click()

except:
    pass

这是我坚持的部分

time.sleep(5)
window_before = driver.window_handles[0]
driver.find_element_by_id("tsMore").click()
try:
    driver.find_element_by_css_selector('#saveExportLink_6').click()
    window_after = driver.window_handles[1]
    driver.switch_to_window(window_after)
    html = driver.page_source()
    print html

3 个答案:

答案 0 :(得分:1)

在css选择器中使用通配符来获取模态对话框:

driver.find_element_by_css_selector('[id^="submitButton"]')

这将找到id为submitButton

的第一个元素

答案 1 :(得分:0)

您希望通过部分匹配找到。在XPath中,您可以使用正则表达式。在CSS选择器中,您可以通过前缀进行匹配。

在Java中,这类似于(来自内存,未经测试):

driver.FindElement(By.CssSelector("button[id^='submitButton']"))

此SO问题的更多细节。 Finding an element by partial id with Selenium in C#

答案 2 :(得分:0)

在xpath中,我认为您可以尝试//*[contains(@id,'submitButton_')]//*[starts-with(@id,'submitButton_')]来定位元素。