当前位置:   article > 正文

Win10 python环境测试selenium加IE浏览器自动化-踩坑实录_selenium iedriver

selenium iedriver

【背景】

需要访问某个旧网址,仅支持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()

 【实现效果】如下:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/353937
推荐阅读
相关标签
  

闽ICP备14008679号