Closed jiehuiDT closed 1 year ago
自定义操作写python: https://juejin.cn/post/6857700124010348552
ID经常变换试着用CSS Selector等其他方式定位,或者//dialog这种,或者直接写Selenium语句,有些网站就是这样做的,不让你固定元素ID以实现反爬。
页面操作过程中出现的弹窗,对于弹窗,在自定义操作使用python exec操作,填写 self.browser.switch_to.alert().accept() 弹窗会消失,但是查看后台,报错之后卡住不动,请问大佬是哪里需要修改。 Traceback (most recent call last): File "threading.py", line 1038, in _bootstrap_inner File "easyspider_executestage.py", line 351, in run File "easyspider_executestage.py", line 739, in executeNode File "easyspider_executestage.py", line 744, in executeNode File "easyspider_executestage.py", line 1372, in clickElement File "selenium\webdriver\remote\webdriver.py", line 492, in execute_script File "selenium\webdriver\remote\webdriver.py", line 429, in execute File "selenium\webdriver\remote\errorhandler.py", line 242, in check_response selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: 切换成功 Message: unexpected alert open: {Alert text : 切换成功} (Session info: chrome=115.0.5790.171) Stacktrace: Backtrace: GetHandleVerifier [0x00007FF640494A62+57106] (No symbol) [0x00007FF64040CF52] (No symbol) [0x00007FF6402DE2CB] (No symbol) [0x00007FF64034E762] (No symbol) [0x00007FF640336793] (No symbol) [0x00007FF64030CE81] (No symbol) [0x00007FF64030E064] GetHandleVerifier [0x00007FF640744222+2873042] GetHandleVerifier [0x00007FF640796590+3209792] GetHandleVerifier [0x00007FF64078F3AF+3180639] GetHandleVerifier [0x00007FF640525F25+652245] (No symbol) [0x00007FF640418618] (No symbol) [0x00007FF6404147C4] (No symbol) [0x00007FF6404148BC] (No symbol) [0x00007FF640404C33] BaseThreadInitThunk [0x00007FFBBDC83034+20] RtlUserThreadStart [0x00007FFBBEB41551+33]
首先就是语句写的有问题,switch_to.alert后没有括号:
self.browser.switch_to.alert.accept()
然后就是这个功能我也没有详细测试过,你尝试下面给的方案:
这个异常表明在您试图执行某些操作时,出现了意外的警告对话框。一种可能的解决方案是在执行造成异常的操作之前,先等待JavaScript警告对话框出现,然后接受或者拒绝它。
Selenium提供了一个叫WebDriverWait的等待机制,可以设置一个等待时间,在这个时间内如果满足条件就立即执行下一步,如果时间结束还没有满足条件,就抛出TimeoutException。
这里是如何使用WebDriverWait来等待并处理警告的例子:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
try:
# 等待警告出现并获取警告对话框
WebDriverWait(self.browser, 5).until(EC.alert_is_present())
# 切换到警告并接受
alert = self.browser.switch_to.alert
alert.accept()
except Exception as e:
print(e)
在此代码中,首先尝试执行可能会造成意外警告的操作。然后,使用WebDriverWait等待警告出现,如果在5秒内警告出现,则接受警告后进行后续操作。如果5秒结束还没有等到警告,就会抛出TimeoutException异常。
如果实在解决不了,我会在忙完这段时间后去测试和开发,不过就需要等一段时间了。
感谢大佬,可以解决,然后发现一个比较有意思的地方,用自定义操作,执行这个操作,要选操作在iframe内
你好,大佬,切换下拉选项按文本切换,弹窗是confirm,页面无法定位到元素,请问怎么解决。 另外,请教一下,怎么定位到dialog的元素,id经常变换