python3模块之selenium常用

爬虫利器selenium

使用场景

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

如何使用

使用selenium 需要配置 chromedriver

windows如何配置 chromedriver

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

我这里放的位置是: C:\Program Files\Google\Chrome\Application\chromedriver.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 Files\Google\Chrome\Application\chromedriver.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 获取:

<a id="aaa">aaa</a>

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

find_element_by_xpath

根据xpath 规则 获取:

<body><h2>test</h2></body>

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 Files\Google\Chrome\Application\chromedriver.exe",
                               options=chromeOptions)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值