快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

这篇具有很好参考价值的文章主要介绍了快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Google驱动的安装和selenium自动化的使用

一.Google驱动的安装

在使用selenium之前必须先安装驱动,你可以安装搜狗,火狐,Google,edge等浏览器
的驱动,但我建议大家使用Google的驱动,因为这个功能全面,搜索文件更加快
火狐浏览器的驱动也非常好用,可以试试


在安装之前先要安装一下selenium模块 -->直接在编译器终端或者在cmd里面输
入"# pip install selenium"这个命令即可

Google的下载地址:
	http://chromedriver.storage.googleapis.com/index.html

第一步:
打开这个链接后会有很多个压缩包,这个里面都是Google的驱动,但是你要根据自己的浏览器版本号去下载相应的驱动,当然火狐浏览器不需要去下载相应版本号的驱动
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

浏览器版本号查看步骤
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
下载到对应版本号的驱动后解压得到下面这个可执行文件
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
第二步:
要把这个可执行文件放到当时我们安装的python编译器里面的那个script脚本文件夹中去

如何找到自己python安装在了哪个位置
win+r —>输入cmd
最后输入下面代码就可以找到python安装的位置了
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
第三步:
给安装的驱动配置环境变量
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
这个环境变量的配置就是把python里面的script文件夹里面的可执行文件生效
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

二.selenium自动化的初体验

1.导入模块
	from selenium import webdriver
2.实例化一个谷歌驱动对象
	driver = webdriver.Chrome()
3.打开网页(这里用搜狗为例)
	driver.get('https://www.sogou.com/')
4.将打开的网页全屏
	driver.maximize_window()

三.selenium元素的定位操作

1.根据元素id属性定位
input = driver.find_element_by_id('query') 

2.通过name属性值定位元素

name = driver.find_element_by_name('query')

3.通过xpath定位元素

input = driver.find_element_by_xpath('//input[@id="query"]')

input = driver.find_elements_by_xpath('//input')
第一种find_element_by_xpath()就是匹配到第一个元素,
如果没有匹配到将会抛出异常,在抓取网页过程中我们为了在
执行程序的过程中不报错就做一个try异常捕获

第二种find_elements_by_xpath()匹配到所有元素,就是以一
个数组返回,如果没有匹配到那么就会返回一个空数组

4.通过链接文本匹配对象

text = driver.find_element_by_link_text('知乎')

四.selenium页面交互方法

1.给输入框中输入值(send_keys())
	首先要定位到输入框
input = driver.find_element_by_id('query') 
			input.send_keys('周杰伦')
2.点击按钮方法(click())
button = driver.find_element_by_id('stb') 
input.click()

3.回退到上一个网页的方法(back())

driver.back() #这个driver是浏览器驱动实例化的一个对象

4.前进到下一个网页follow()

driver.follow()

5.close()关闭当前窗口,如果它是当前打开的最后一个窗口则会退出浏览器

driver.close()

6.quit()退出驱动程序,并关闭所有相关的窗口

driver.quit()

7.执行js代码达到滑动滚动条用来渲染数据,写完之后用driver.execute_script()方法执行js代码

js = 'window.scrollTo(0,document.body.scrollHeight)'
driver.execute_script(js)

五.selenium获取元素信息

1.获取属性值get_attribute()

 button = driver.find_element_by_id('stb').get_attribute('value')

2.获取元素文本

text = driver.find_element_by_id('zhihu').text

3.获取标签名称

tag_name = driver.find_element_by_id('zhihu').tag_name

六.selenium等待时间

1.强制等待(不管页面数据是否渲染完毕都需要等待完所设置的等待时间)

from time import sleep
sleep(10) #强制等待十秒

2.隐式等待

from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10)

3.显式等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
try:
    input = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID, 'query')))
    input.send_keys('周杰伦')

    button = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.ID, 'stb1')))
    button.click()
except Exception as e:
    print('哥们,超时了!')

显式等待和隐式等待的区别

隐式等待 : 在规定的时间内,渲染元素,如果渲染出来,立即向下执行,如果超出时间没有渲染出来,就会抛出异常

显示等待 : 显示等待某一个元素是否加载出来的时候,加载出来,立马向下执行,没有加载出来继续等待超时就抛出异常

注意:在使用selenium等待时间时,为了防止程序在执行过程中报错,我们需要去做一个类似我上面隐式等待中那样的异常捕获

七.selenium窗口切换

快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

当我们一次性就打开了多个窗口时,然后直接去获取所打开的网页窗口的源代码,此刻我们会发现我们获取的是第一个窗口的源代码而不是我们所想的最后一个窗口的源代码,如果在这种时候想要获取最后打开的窗口源代码,就要去使用我们的selenium等待时间去渲染出我们的网页数据,给网页窗口一个缓冲时间

所谓句柄就是当前浏览器所打开的每一个窗口的标识符,每个窗口就是一个句柄,句柄就是在selenium中用来实现页面切换和页面关闭的功能

八.selenium_iframe框架的切换

1.主框架切换到子框架

from selenium import webdrive
driver = webdriver.Chrome()
driver.get('https://mail.qq.com/')
driver.switch_to.frame('login_frame')

2.切换到主框架

from selenium import webdrive
driver = webdriver.Chrome()
driver.get('https://mail.qq.com/')
driver.switch_to.frame('login_frame')
driver.switch_to.default_content()

3.嵌套iframe框架的切换

<iframe>
    <iframe id="l1">
        <iframe id="l2"></iframe>
    </iframe>
</iframe>


driver.switch_to.frame('l1')
driver.switch_to.frame('l2')

4.切换到iframe的父框架

driver.switch_to.parent_frame()

切换框架时要注意事项

1.有id 直接写id值进行切换
2.有name 并且唯一,直接写name进行切换
3.没有id,没有name 先定位到iframe元素,在切换到对应的框架
例如:
iframe = driver.find_elements_by_tag_name(‘iframe’)[0]
driver.switch_to.frame(iframe)

九.selenium动作链的使用

1.实例化一个动作链对象

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
action = ActionChains(driver)

2.动作链方法

I 将鼠标移动到某一个元素上
move_to_element(element)
action.move_to_element(input)

II 将鼠标移动到当前鼠标位置偏移处(单位是px)
move_by_offset(xoffset,yoffset)

III 输入内容到标签处
send_keys_to_element(element,key)
action.send_keys_to_element(input, '周杰伦')  # 在输入框输入周杰伦

IV 点击
click()

V 执行相关动作链的操作
perform()
action.perform()

VI 点击一个元素不松开(长按)
click_and_hold(element)

VII右键点击
context_click(element)

VIII 双击某一个元素
double_click(element)

十.下拉框

快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

十一.滑动滚动条

快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

十二.英雄联盟英雄皮肤抓取案例

from selenium import webdriver
import requests
from lxml import etree
import os
if not os.path.exists('./英雄联盟皮肤大全'): #创建一个根文件夹
    os.mkdir('./英雄联盟皮肤大全')
driver = webdriver.Chrome()
driver.get('https://lol.qq.com/data/info-heros.shtml#Navi')
driver.implicitly_wait(5)#隐式等待5s
# print(driver.page_source)
tree = etree.HTML(driver.page_source)
hero_list = tree.xpath('//ul[@id="jSearchHeroDiv"]/li') #英雄列表
for hero in hero_list:
    herf = 'https://lol.qq.com/data/' + hero.xpath('./a/@href')[0] #英雄的详细链接
    driver.get(url=herf)
    driver.find_element_by_xpath('//ul[@id="skinNAV"]/li[2]').click() #这里存在一个懒加载(解决懒加载)
    
    #数据解析
    detail_tree = etree.HTML(driver.page_source) 
    images = detail_tree.xpath('//ul[@id="skinBG"]/li/img') #
    main_name = detail_tree.xpath('//h1[@id="DATAname"]/text()')[0]
    nick_name = detail_tree.xpath('//h2[@id="DATAtitle"]/text()')[0]
    name = main_name+nick_name #文件夹名称
    if not os.path.exists('./英雄联盟皮肤大全/'+name):
        os.mkdir('./英雄联盟皮肤大全/'+name)
    for img in images:
        img_src = img.xpath('./@src')[0]#皮肤图片链接
        img_title = img.xpath('./@alt')[0] #皮肤名字
        suffix =img_src.split('.')[-1] #皮肤图片的后缀
        content = requests.get(url=img_src).content
        #保存数据
        with open('./英雄联盟皮肤大全/'+name+'/'+img_title+'.'+suffix,'wb') as f:
            f.write(content)
        print(f'{img_title}----保存成功!')

抓取细节
当此网页存在懒加载时,我们需要先解决懒加载问题,再去获取网页数据源码进行数据解析

十三.无界面浏览器抓取

所谓无界面浏览器抓取就是当我们在使用selenium抓取网页数据时,会自动请求打开浏览器界面,不利于看到我们的抓取效果,这个时候就可以使用无头浏览器来解决此问题.

使用方法
1.导入模块

from selenium.webdriver.chrome.options import Options

2.实例化一个options对象

options = Options()

3.给options对象添加一个无头参数

options.add_argument('--headless')

4.将options对象传入driver驱动对象中

driver = webdriver.Chrome(options)

快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

十四.不显示自动测试

不显示自动测试就是在我们使用selenium抓取数据的时候浏览器的菜单栏上面会有一个"受到自动软件测试控制"的标识,我们可以通过我下列方法解决

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_experimental_option('useAutomationExtension', False)
options.add_experimental_option('excludeSwitches', ['enable-automation'])

driver = webdriver.Chrome(options=options)
driver.maximize_window()

driver.get('https://www.sogou.com/')

print(driver.page_source)

使用前
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

使用后
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

十五.selenium反检测

就是当你执行程序时你的数据没有抓取到,就是有可能被浏览器的反爬机制给监视到了,可以用这个试试

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--disable-blink-features=AutomationControlled')

driver = webdriver.Chrome(options=options)
driver.maximize_window()

driver.execute_cdp_cmd(
    "Page.addScriptToEvaluateOnNewDocument", {
        "source": '''
            Object.defineProperty(navigator,'webdriver',{
                get:()=>undefined
            })
            
        '''
    }
)

driver.get('https://www.sogou.com/')

print(driver.page_source)

十六.抖音视频爬取案例

from selenium import webdriver
import requests
from lxml import etree
from time import sleep

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_argument('User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36')

driver = webdriver.Chrome(options=chrome_options)

# driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.douyin.com/user/MS4wLjABAAAAEFD7UfHGL0ppALoDm8h1LB95hfM0ocEVARtOCgqkMfo')
driver.implicitly_wait(5)
js = 'window.scrollTo(0,document.body.scrollHeight)'
videoInfo = []  # 存储最终结果
for second in range(15):
    driver.execute_script(js)
    sleep(1)

# 获取源码解析数据
tree = etree.HTML(driver.page_source)


a_link = tree.xpath('//*[@id="root"]/div/div[2]/div/div/div[4]/div[1]/div[2]/ul/li/a/@href')  # 详细页面链接
title_list = tree.xpath('//*[@id="root"]/div/div[2]/div/div/div[4]/div[1]/div[2]/ul/li/a/div/p/text()')  # 名字


for index in range(int(len(title_list))):
    # print(1)
    item = {}
    link = 'https:' + a_link[index]
    driver.get(url=link)
    driver.implicitly_wait(3)
    detail_tree = etree.HTML(driver.page_source)
    vedio_link = 'https:' + detail_tree.xpath('//video/source[1]/@src')[0]  # 视频链接
    item['video'] = vedio_link
    item['title'] = title_list[index]
    videoInfo.append(item)
    with open('./douyin.json', 'a+', encoding='utf-8') as f:
        f.write(str(item))
    print(f'{item["title"]}----下载完毕!')

快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
报了此错误,数据抓取不到,可以推断有反爬,可以使用我们前面的反检测进行尝试.
在程序前面加上此段代码也可以
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

17.总结

本章博客主要是介绍Google驱动的安装以及selenium由初阶---->高阶的使用方法,有反爬案例解析文章来源地址https://www.toymoban.com/news/detail-453174.html

到了这里,关于快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫入门基础-Selenium反爬

    在网络时代,爬虫作为一种强大的数据采集工具,被广泛应用于各行各业。然而,许多网站为了防止被恶意爬取数据,采取了各种反爬虫机制。为了能够成功地绕过这些机制,Selenium成为了爬虫领域的一把利器。本文将为你介绍爬虫入门基础,并重点探讨如何使用Selenium应对反

    2024年02月08日
    浏览(33)
  • selenium反爬

    使用selenium也会被网站反爬,有的网站甚至检测到是selenium时就会封禁ip,所以今天分享一下selenium的反爬。大多数网站识别selenium的方法是通过window.navigator.webdriver,它的作用是在用户打开浏览器时给当前窗口一个window属性来存放用户的各种信息,当我们使用selenium时值为true,正

    2024年02月12日
    浏览(44)
  • selenium反爬driver配置(通用)

    玩爬虫的时候,遇到了很多不能爬取的问题,网页为空、返回码出错(400、412)、图片不展示但源码中存在图片链接等,问题通常都是服务器检测到浏览器是自动化爬取。 文章记录一下通用解决办法 一本万利的方法(不用手动配置这么多参数): undetected_chromedriver包内部加

    2024年02月14日
    浏览(28)
  • selenium工作原理和反爬分析

    Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一,支持并行测试执行。Selenium通过使用特定于每种语言的驱动程序支持各种编程语言。Selenium支持的语言包括C#,Java,Perl,PHP,Python和Ruby。Selenium支持的浏览器包括Internet Explorer,Mozilla Firefox,Google Chrome和Safari。

    2024年02月02日
    浏览(28)
  • selenium反爬遇到的问题以及解决措施

    首先分享一下前两天爬取某宝数据时遇到的一些问题,第一个问题是模拟登陆时就被检测到了,之前的文章讲过为什么会被检测到以及应对的方法,今天分享一个更加实用的方法,  加入这段代码以后可以规避掉网站对selenium的检测 下面分享一下遇到的一些问题, 第一个问题

    2024年02月15日
    浏览(30)
  • selenium反爬-绕过浏览器指纹的常用方法

    代码如下: Undetected_chromedriver 是一个经过优化的 Selenium WebDriver ,可以避免触发反机器人程序。 如绕过 Cloudflare 、Akamai、知乎。它适用于 Google Chrome 、 Brave 和许多其他基于 Chromium 的浏览器。 代码如下: 还有一点要注意: 异常现象: 如果使用 pyinstaller 对 undetected-chromedriv

    2024年02月13日
    浏览(44)
  • 整理网上关于selenium的反爬机制以及解决办法。

    只是收集目前找到的一些关于selenium的反爬问题。 未亲自尝试,不保证效果。也会持续跟进相关的内容继续整理。 现象:用户正常访问该值为false。使用selenium时该值为true。 解决:去除该参数 现象:登录是绕不开的话题,我也不知各个网站都是怎么验证登录的。有没有什么

    2024年02月03日
    浏览(33)
  • 区块链学习路线图 初阶+中阶+高阶

    一、报告名称     区块链学习路线图 二、作者 张开翔 微众银行区块链首席架构师 三、若需要pdf版本 关注公号” 元宇宙最新报告 ”,回复“区块链学习路线图”,获取百度网盘免费下载链接。 免责声明 :文章报告仅代表原作者观点,版权归原作者所有。本公号仅为

    2024年02月12日
    浏览(37)
  • selenium爬虫反爬-修改window.navigator.webdriver的值

    使用selenium写爬虫的时候 window.navigator.webdriver 的值是 true ,容易被识别,需要隐藏起来,都说这个 execute_cdp_cmd 的方法有效,但是都是 python 版本的, java 尝试了发现没效果。我的版本是 Chrome/106.0.5249.119 经过在Bd的知识海洋中捞针,在 https://blog.csdn.net/qq_40178216/article/details/1

    2024年02月11日
    浏览(31)
  • selenium遇到高德地图反爬(网络拥堵,请稍后重试)

    这里为了避免被封IP,我使用了IP代理。 2.通过selenium自带的函数来获取页面的cookie信息,每点击一次会生成新的cookie,我再把新的cookie加入到当前页面中。 3.通过这样就可以实现通过搜索位置名来获取地理位置信息,或者是商铺信息了。 需要源码私聊我~~~  Q群交流:4502973

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包