栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python3模块之selenium常用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python3模块之selenium常用

爬虫利器selenium 使用场景

由于伪造 登陆过的用户 cookies 分析起来比较复杂使用浏览器 模拟登陆 通过 selenium 模块来操控浏览器达到抓取数据的目的。服务端有比较严格的检查请求机制的情况下。 如何使用

使用selenium 需要配置 chromedriver

windows如何配置 chromedriver
    本机必须安装chrome 浏览器 。chrome 中访问 chrome://settings/help点击查看 这里 去寻找合适自己浏览器版本的.
    下载安装自己系统对应的版本 并记录安装的位置 这个位置。在程序中需要使用
    下载后解压 文件 把其中的 chromedriver.exe 放置于Chrome 打开的目录下。
    这个目录怎么找也很简单:桌面找到谷歌浏览器 ⇒ 鼠标右击 ⇒ 选择 属性 查看 目标 或者起始位置即可;

我这里放的位置是: C:Program FilesGoogleChromeApplicationchromedriver.exe

linux系统如何配置chromedriver

mac | linux 这里先自行查找方法,都大同小异。

selenium使用方法

executable_path : chromedriver.exe的全路径
见下例:

from selenium import webdriver
 # 设置chromedriver
chromeOptions = webdriver.ChromeOptions()
# 关闭浏览器上显示的自动操作横幅
chromeOptions.add_experimental_option('excludeSwitches', ['enable-automation'])
browser = webdriver.Chrome(executable_path="C:Program FilesGoogleChromeApplicationchromedriver.exe",
                               options=chromeOptions)
browser.get('https://www.baidu.com/')
# 给页面的input元素填入值
browser.find_element_by_css_selector('.s_ipt').send_keys('测试')
# 样式选择器选择 浏览器中的元素
browser.find_element_by_css_selector('input#su').click()
# 退出
browser.quit()

上面这个例子只是简单使用。下面我会列出 常用的 获取元素 以及操作元素的方法,还有常见的一些问题如何解决

获取元素方式

下面只介绍几个 ,应该还有很多方式,可自行查找学习。

find_element_by_id

根据html中的 标签 id 获取:

aaa

browser.find_element_by_id("//body//h2").text

find_element_by_xpath

根据xpath 规则 获取:

test

browser.find_element_by_xpath("//body//h2").text

find_element_by_css_selector

id选择
browser.find_element_by_css_selector('#test')
类选择
browser.find_element_by_css_selector('.test')
标签选择
browser.find_element_by_css_selector('a')

多class 选择元素
browser.find_element_by_css_selector('.classa.classb')

支持 css 选择器语法。 it is said,It is efficient

等待元素出现

由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。如果超出了设置时间的则抛出异常
缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度

– 调用该方法提供的驱动程序作为参数,直到返回值为True
WebDriverWait(driver,10).until(method,message="")

– 调用该方法提供的驱动程序作为参数,直到返回值为False
WebDriverWait(driver,10).until_not(method,message="")

示例: 直到id =tid 的元素 可见 在执行

from selenium.webdriver.support.wait import WebDriverWait
wait = WebDriverWait(browser, 10, 0.2)
wait.until(EC.visibility_of_element_located((By.CSS_SELECtOR, "#tid")), message="")

EC.visibility_of_element_located : 当我们需要找到元素,并且该元素也可见。presence_of_element_located: 当我们不关心元素是否可见,只关心元素是否存在在页面中。 伪装浏览器为正常用户

一般来说 下面两种方式 就够用了,但也不排除 目标网站有更高级的 判断是否是 自动化操作浏览器点击的方法。

浏览器特征隐藏

这里需要使用到 stealth.min.js 文件。动手能力抢的小伙伴 可以自行源码编译,不过可能过程很麻烦。

    with open('js/stealth.min.js') as f:
        js = f.read()
    browser.execute_cdp_cmd("Page.addscriptToevaluateOnNewdocument", {
        "source": js
    })
浏览器参数设置
 from selenium import webdriver
 
 chromeOptions = webdriver.ChromeOptions()
    # 这条是重点,具体看网站检测哪些东西
    chromeOptions.add_experimental_option('excludeSwitches', ['enable-automation'])
    chromeOptions.add_argument("start-maximized")
    chromeOptions.add_argument('--no-sandbox')
    chromeOptions.add_argument('--disable-gpu')
    chromeOptions.add_argument('--disable-dev-shm-usage')
    chromeOptions.add_argument("--disable-blink-features=AutomationControlled")

    prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': dic_path}
    chromeOptions.add_experimental_option('prefs', prefs)
 
    chromeOptions.add_experimental_option("useAutomationExtension", False)
    chromeOptions.add_argument(
        '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36')
    browser = webdriver.Chrome(executable_path="C:Program FilesGoogleChromeApplicationchromedriver.exe",
                               options=chromeOptions)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741187.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号