【背景】

需要访问某个旧网址,仅支持IE浏览器访问。为了实现自动化,被迫采用python加selenium、加IE浏览器来做。

【实录】

selenium采用IE浏览器方式的资料不多,网上可供参考范例不多。以下实时记录整个过程,实现调通一个基本访问实例。

【第一步】安装正确版本的selenium、urllib3和IE driver。

经查阅资料,目前能找到的最高版本带IE driver支持的selenium是3.141.0版本

pip install selenium==3.141.0

pip uninstall urllib3pip 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()

 【实现效果】如下:

 【发文章不易,请多多关注、点赞、下载、支持!谢谢!】

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: