自动化测试:python+selenium 报错问题。之前脚本运行的好好的今天就不行了,打开浏览器后,send_keys
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化测试:python+selenium 报错问题。之前脚本运行的好好的今天就不行了,打开浏览器后,send_keys相关的知识,希望对你有一定的参考价值。
根本没改过脚本,之前运行过,后面再运行就忽然报错这个:随便网上找了个脚本运行也是如此
能打开浏览器,但是不知道后面为什么要输入就开始报错。
C:\Users\sunl\AppData\Local\Programs\Python\Python36\python.exe E:/自动化测试/test/test.py
Traceback (most recent call last):
File "E:/自动化测试/test/test.py", line 9, in <module>
browser.find_element_by_id("kw").send_keys("selenium")
File "C:\Users\sunl\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py", line 349, in send_keys
'value': keys_to_typing(value))
File "C:\Users\sunl\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py", line 493, in _execute
return self._parent.execute(command, params)
File "C:\Users\sunl\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 249, in execute
self.error_handler.check_response(response)
File "C:\Users\sunl\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 193, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Expected [object Undefined] undefined to be a string
两个可能:
你的目标页面内容变了。
你的浏览器自动升级导致的。
你换个浏览器试试。
python Selenium chromedriver 自动化超时报错:你需要使用多标签保护罩护体
在使用selenium + chrome 作自动化测试的时候,有可能会出现网页连接超时的情况
如果出现网页连接超时,将会导致 webdriver 也跟着无法响应,不能继续进行任何操作
即时是去打开新的连接也会报Time out错误
那么如果有很多连接要去做弹窗抓取,却不想因为其中一两个页面超时而中断进程该怎么办呢?
这时候你需要一个备用标签做金刚保护罩来护体!
具体的思路是在打开需求页面之后,再次开启一个新的标签去访问一个一定不会超时的页面(如百度),此时窗口句柄不要切换,依旧按照自己的逻辑去操作,当出现页面超时情况的时候,关闭原有标签,设置主窗口句柄到百度页面所在的标签通过get访问后续的连接,同时在开启一个标签做保护罩即可。
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() prefs = { ‘profile.default_content_setting_values‘: { ‘images‘: 2, # 禁用图片的加载 ‘javascript‘: 2 ##禁用js,可能会导致通过js加载的互动数抓取失效 } } chrome_options.add_experimental_option("prefs", prefs) # chrome_options.add_argument("--headless") # 不弹出浏览器 browser = webdriver.Chrome(chrome_options=chrome_options) browser.implicitly_wait(5) # 操作、获取元素时的隐式等待时间 browser.set_page_load_timeout(10) # 页面加载超时等待时间 main_win = browser.current_window_handle #记录当前窗口的句柄 all_win = browser.window_handles # 开始访问页面 print ‘Opening page‘ urls = [] # 定义你想要抓取的全部的页面 for url in urls: try: if len(all_win) == 1: print ‘弹出保护罩‘ js = ‘window.open("https://www.baidu.com");‘ browser.execute_script(js) # 还是定位在main_win上的 for win in all_win: if main_win != win: print ‘保护罩WIN‘, win, ‘Main‘, main_win browser.switch_to.window(main_win) browser.get(url) # 此处访问你需要的URL body = browser.page_source html = etree.HTML(body) # 下面是你的抓取逻辑 省略 except: # 超时 print ‘Time out‘ # 切换新的浏览器窗口 for win in all_win: if main_win != win: print ‘WIN‘, win, ‘Main‘, main_win print ‘切换到保护罩‘ browser.close() browser.switch_to.window(win) main_win = win js = ‘window.open("https://www.baidu.com");‘ browser.execute_script(js) if ‘time‘ in str(traceback.format_exc()): print ‘页面访问超时‘
以上是关于自动化测试:python+selenium 报错问题。之前脚本运行的好好的今天就不行了,打开浏览器后,send_keys的主要内容,如果未能解决你的问题,请参考以下文章
学习《selenium2自动化测试基于python》遇到的问题
python Selenium chromedriver 自动化超时报错:你需要使用多标签保护罩护体