我很欣赏一些关于手头问题的想法,我一直试图解决1-2天。
我正在使用FireFox 49.0.1上的Selenium 2.53.6运行Python脚本。该脚本应该单击页面上的一系列文档下载链接(我已将浏览器设置为自动下载这些文件类型而不是打开它们)。点击后,可能会展开以下两个事件之一:
以下是为处理上述事件而编写的脚本的摘录:
file_link = tr.find_element_by_xpath('td[5]/a')
file_link.click()
time.sleep(7) # Allows the blank pop-up to disappear automatically under Event2
agree_button = None
# Checks for the pop-up window
try:
print "Step 1"
driver.switch_to.window(driver.window_handles[1])
print "Step 2" # SCRIPT STOPS RUNNING HERE
agree_button = driver.find_element_by_xpath('//input[@value="Agree and proceed"]')
print "Popup found"
except:
driver.switch_to.window(driver.window_handles[0])
# Clicks the button if the pop-up window is found
if agree_button is not None:
agree_button.click()
print "Button clicked"
当事件2的网络中存在高延迟时,会出现问题。在正常情况下,空白弹出窗口几乎立即消失,并在下载后立即开始下载。但是,如果网络速度较慢,则空白弹出窗口可能会持续超过分配的7秒,导致脚本在弹出窗口消失之前进入“步骤2”。
奇怪的是,此时脚本不会继续寻找agree_button
。如果确实如此,则会触发异常并且我将能够恢复到原始窗口以恢复步骤。脚本只是拖延而且看起来什么也没做。
提前感谢您的时间!
答案 0 :(得分:0)
您需要继续等待,直到弹出窗口消失。您可以这样做的一种方法是在代码中进行以下更改:
file_link = tr.find_element_by_xpath('td[5]/a')
file_link.click()
time.sleep(7) # Allows the blank pop-up to disappear automatically under Event2
agree_button = None
# Checks for the pop-up window
try:
print "Step 1"
driver.switch_to.window(driver.window_handles[1])
print "Step 2" # SCRIPT STOPS RUNNING HERE
while True:
agree_button = driver.find_element_by_xpath('//input[@value="Agree and proceed"]')
if agree_button is not None:
break
else:
sleep(7)
print "Popup found"
except:
driver.switch_to.window(driver.window_handles[0])
# Clicks the button if the pop-up window is found
if agree_button is not None:
agree_button.click()
print "Button clicked"