【爬虫】Selenium实战笔记

安装与配置


Centos7.9

1、 安装 Chrome 浏览器

yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

google-chrome --version

2、安装 ChromeDriver

去 https://npm.taobao.org/mirrors/chromedriver/ 找对应 Chrome 的版本,然后复制下载链接

cd /usr/software

wget https://npm.taobao.org/mirrors/chromedriver/87.0.4280.88/chromedriver_linux64.zip

unzip chromedriver_linux64.zip

ln -s /usr/software/chromedriver /usr/bin/chromedriver

chromedriver --version

Ubuntu 18.04

1、安装chrome浏览器

1、卸载chrome

如果之前已安装chrome但版本太老,和chromedriver版本不匹配,则可以先卸载chrome

sudo apt-get remove google-chrome-stable

2、安装依赖包:

sudo apt-get install libxss1 libappindicator1 libindicator7

3、下载安装包:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

4、安装

sudo dpkg -i google-chrome-stable_current_amd64.deb 

5、查看是否安装成功以及安装版本

google-chrome --version
# Google Chrome 80.0.3987.116 

安装chrome driver

1、下载安装包

在淘宝镜像网站下载chromedriver,版本需要和已安装的 chrome 版本保持一致;

淘宝镜像: https://npm.taobao.org/mirrors/chromedriver/

下载后放入服务器上,比如放在 /usr/software 路径下

2、安装解压缩工具unzip

sudo apt-get install unzip

3、解压缩+赋予可执行的权限

unzip chromedriver_linux64.zip
chmod +x chromedriver

4、移动到 /usr/local/share 路径下

sudo mv -f chromedriver /usr/local/share/chromedriver

mv -f 是强行覆盖的意思

5、建立软连接

sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

6、验证chromedriver是否安装成功:

chromedriver --version
windows的安装

windows下只需要手动安装 chrome 浏览器,并下载对应的驱动即可,驱动放在和代码一样的路径下即可运行,下载地址同样可以用镜像地址:

https://npm.taobao.org/mirrors/chromedriver/

使用


options相关

需要注意的是,如果chrome未安装在默认路径下,需要通过 option.binary_location 设置chrome的路径,如果chromedriver不和当前代码在一个路径下,也需要设置 chromedriver 的路径。

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

option = webdriver.ChromeOptions()



driver = webdriver.Chrome(options = options)

# 手机模式
mobileEmulation = {'deviceName' :'Galaxy S5'}
options.add_experimental_option('mobileEmulation', mobileEmulation)

# 无头模式
option.add_argument('--headless')

# gpu加速关闭
option.add_argument('--disable-gpu')
option.binary_location = r'D:\Google\Chrome\Application\chrome.exe'
option.add_argument('blink-settings=imagesEnabled=false')
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(executable_path="chromedriver",options=option)

options 相关

chrome_options = Options()
chrome_options.add_argument('window-size=1920x3000')  
chrome_options.add_argument('blink-settings=imagesEnabled=false') # 禁止加载图片
chrome_options.add_argument('--headless')


options.add_argument("--start-maximized")  # 开始最大化
options.add_argument("--test-type")
options.add_argument("--ignore-certificate-errors")  # 忽略证书错误
 
options.add_argument("--disable-popup-blocking")  # 禁用弹出拦截
options.add_argument("no-sandbox")  # 取消沙盒模式
options.add_argument("no-default-browser-check")  # 禁止默认浏览器检查
options.add_argument("about:histograms")
options.add_argument("about:cache")
 
options.add_argument("disable-extensions")  # 禁用扩展
options.add_argument("disable-glsl-translator")  # 禁用GLSL翻译
options.add_argument("disable-translate") 
options.add_argument("--disable-gpu")  # 禁用GPU
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--hide-scrollbars")  # 隐藏滚动条

webdriver相关

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

# 设置浏览器大小
driver.set_window_size(600,3000)

# 关闭浏览器
driver .quit() 

# 关闭当前操作的tab
driver .close()

执行 JS

js = 'window.scrollTo(0,%s)'%(i*100)
driver.execute_script(js)
下拉

1、执行 JS

for i in range(100):
	# x管水平,y管垂直
	js = 'window.scrollTo(0,%s)'%(i*100)
	driver.execute_script(js)
	time.sleep(0.5)

2、

点击

注意,需要点击的地方必须是我们可以看到的地方,如果看不到,则需要执行下拉等操作;

a = driver.find_element_by_xpath('//*[@id="product"]/uni-view[4]/uni-view[9]/uni-view[2]/uni-view[6]')

a.click()
selenium添加cookie(绕过登录)

有些网站需要登录,我们可以提前登录,然后拿到cookie字符串,在selenium访问的时候添加cookie:

  • 人工登录网站,拿到cookie字符串;

  • selenium访问url;

  • 删除当前cookie;

  • 依次添加每个cookie,每个cookie必须为字典的形式,且必须有name和value两个key;

  • selenium再次访问url,两次访问的原因是,必须先访问,selenium才能知道cookie属于哪个网站;

driver = webdriver.Chrome(options=option)
driver.get(url)

driver.delete_all_cookies()

cookies = "magicid=95c9HOMFQUfwJOaJQaoKtxH3+A6YuS4v2PaMCR5vthTBaLSQv4yIN4/TI76Mhhde; ASP.NET_SessionId=vo4mepcmaboircxm5bguxsh2; _abtest_userid=c6c22371-bbd9-4a3d-9651-7fb3171cddf4; hoteluuid=5oZm2Xm4lDms2g4L; IsPersonalizedLogin=F"

for line in cookies.split(';'):

    key,value = line.split('=',1)
    cookie = {}

    cookie['name'] = key.replace(" ","")
    cookie['value'] = urllib.parse.unquote(value)
    print(cookie)
    driver.delete_cookie(cookie['name'])
    driver.add_cookie(cookie)

driver.get(url)
获取元素
driver.find_element_by_xpath()

滚动加载信息

driver.execute_script('window.scrollTo(0,100000000)')

selenium + linux 无头爬虫

写代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time, json, os
import requests

url = 'https://www.toutiao.com/search/?keyword=庆余年'
option = webdriver.ChromeOptions()
option.add_argument('--headless')
browser = webdriver.Chrome(options=option)
browser.get(url)
cookie_item = {}
for cookie_dict in browser.get_cookies():
    cookie_item[cookie_dict['name']] = cookie_dict['value']
print(cookie_item)
browser.quit()

破解滑动验证码

https://www.zhangshengrong.com/p/l51g69YJX0/
https://blog.csdn.net/chushiyan/article/details/101397426

selenium 相关方法

1、判断元素是否可见

element = driver.find_element_by_xpath('//span[@class="descript-btn"]')
print(element.is_displayed())

2、

Selenium 控制 已经打开的浏览器

启动chrome

启动浏览器时要赋予启动参数,指定 remote-debugging-port 和 user-data-dir,可以通过命令行启动 或 快捷方式 启动;

1、命令行启动

在 Google 文件夹所在的根目录:

.\Google\Chrome\Application\chrome.exe --remote-debugging-port=6680 --user-data-dir='.\Google\Chrome\Application\User Data'

2、快捷方式启动

为 chrome.exe 生成一个快捷方式,然后在属性里设置目标:

chrome.exe --remote-debugging-port=9222 --user-data-dir="User Data"

在 selenium 中配置,接管已打开的 chrome

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

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = "D:/Python/Python37/Scripts/chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)

span 按钮 按不到(太大)

1、js

if  driver.find_element_by_xpath('/html/body/div[2]/div/div/div[1]/span[1]').is_displayed():
    shenqingshanchu = driver.find_element_by_xpath("/html/body/div[2]/div/div/div[1]/span[1]")
    driver.execute_script("arguments[0].click();", shenqingshanchu)

2、获取span的长、宽、横纵坐标,找到中间位置点击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值