我正在使用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
答案 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_')]
来定位元素。