赞
踩
【背景】
需要访问某个旧网址,仅支持IE浏览器访问。为了实现自动化,被迫采用python加selenium、加IE浏览器来做。
【实录】
selenium采用IE浏览器方式的资料不多,网上可供参考范例不多。以下实时记录整个过程,实现调通一个基本访问实例。
【第一步】安装正确版本的selenium、urllib3和IE driver。
经查阅资料,目前能找到的最高版本带IE driver支持的selenium是3.141.0版本
pip install selenium==3.141.0
pip uninstall urllib3
pip install urllib3==1.26.2
【踩坑之一】注意,需要卸载自动安装的urllib3,因为自动安装版本为2.1.0,与selenium 3.141.0冲突,会导致如下运行报错:
IE driver从这里下载:http://selenium-release.storage.googleapis.com/index.html
将IEDriverServer.exe放置在py脚本程序的当前路径。
【第二步】上范例代码
from selenium import webdriver
iedriver = os.path.join(os.getcwd(), 'IEDriverServer.exe')
print(iedriver)
os.environ["webdriver.ie.driver"] = iedriver # 调用IE浏览器
driver = webdriver.Ie(iedriver, options=options)
driver.get('https://www.baidu.com')
print('登陆成功')
踩坑之二:执行上面的范例代码,会出现如下报错,
selenium.common.exceptions.SessionNotCreatedException: Message: Unexpected error launching Internet Explorer. Browser zoom level was set to 125%. It should be set to 100%
将win10操作系统显示设置调回100%即可(chromedriver没这个问题,仅IE需要)
缩放比例调整为100%后,运行代码,可以执行了,但。。。执行不下去
【踩坑之三】在driver.get('https://www.baidu.com')一直执行,driver.get方法始终不返回,需要很久很久才会报错:
也就是说:网页可以load,但是系统得不到正确的响应,会stuck在起始url页面,无法继续。
【解决方案】调整一个options,调整启动后的IE浏览器“internet选项”两个地方参数才行,三者缺一不可。
(1)调整options,范例如下:
from selenium import webdriver
options = webdriver.IeOptions()
options.ignore_protected_mode_settings = True
driver = webdriver.Ie(options=options)
driver.get("https://www.baidu.com")
(2)调整internet选项-安全,框框中四个地方都必须调成一样的,不勾选“启用保护模式”。
(3)调整--Internet选项--高级,如下图,不勾选---启用增强保护模式。
【完整代码范例】
from selenium import webdriver from selenium.webdriver.common.by import By import os import time iedriver = os.path.join(os.getcwd(), 'IEDriverServer.exe') print(iedriver) os.environ["webdriver.ie.driver"] = iedriver # 调用IE浏览器 options = webdriver.IeOptions() options.ignore_protected_mode_settings = True browser1 = webdriver.Ie(iedriver, options=options) def exec_js(browser, js_str): browser.execute_script(js_str) def get_csdn_article_list(blog_url): # url = 'https://blog.csdn.net/cdl3' browser1 = webdriver.Ie(iedriver) browser1.get(blog_url) browser1.maximize_window() time.sleep(2) # 关闭各种登录弹窗 exec_js(browser1, '$(".login-box").css("display","none")') exec_js(browser1, '$(".passport-login-tip-container").css("display","none")') exec_js(browser1, '$(".csdn-toolbar-creative-mp").css("display","none")') main_content = browser1.find_element(By.CLASS_NAME, 'mainContent') article_link_list = [] if main_content: article_list = main_content.find_elements(By.TAG_NAME, 'article') for article in article_list: url2 = article.find_element(By.TAG_NAME, 'a').get_attribute('href') title = article.find_element(By.TAG_NAME, 'h4').text detail = article.find_element(By.CLASS_NAME, 'blog-list-content').text view_num = article.find_element(By.CLASS_NAME, 'view-num').text.replace('·', '') dianzan_num = article.find_element(By.CLASS_NAME, 'give-like-num').text.replace('·', '') print(url2, title, detail, view_num, dianzan_num) article_link_list.append((url2, title)) if len(article_link_list) > 0: return article_link_list return None def test1(): blog_url = 'https://blog.csdn.net/cdl3' get_csdn_article_list(blog_url) browser1.quit() if __name__ == '__main__': test1()
【实现效果】如下:
【发文章不易,请多多关注、点赞、下载、支持!谢谢!】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。