0


爬虫之selenium

这两天学了一下selenium的基础操作,在这里记录一下

一、下载安装,下载驱动

1.下载

    selenium可以直接通过 pip install selemium直接在pycharm中下载,

2.下载浏览器驱动

    驱动下载需要根据自己的浏览器和浏览器版本去下载,尽量下载相近的版本,不然可能会出现一些问题。我用的是谷歌浏览器。下载地址:https://chromedriver.com/api/known-good-versions-with-downloads.json。

二、找标签

1.找单个标签

    tag = driver.find_element(By.ID, "user")#通过id
     tag = driver.find_element(By.CLASS_NAME, "c1")通过classname
     tag = driver.find_element(By.TAG_NAME, "div")通过tagname
     tag = driver.find_element(By.XPATH, ‘’)通过xpath

2.找所有标签

    ag = driver.find_elements(By.ID, "user")#通过id
     tag = driver.find_elements(By.CLASS_NAME, "c1")通过classname
     tag = driver.find_elements(By.TAG_NAME, "div")通过tagname
     tag = driver.find_elements(By.XPATH, ‘’)通过xpath

被发现了,就是多了个s,嘿嘿

示例代码:

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#初始化
service = Service("./chromedriver.exe")#加载驱动
driver  = webdriver.Chrome(service=service)#绑定浏览器
#请求网页
#这里不像requests一样,没有返回网页信息
#想要网页信息:res = driver.get("https://5xclass.cn/course/").page_source
driver.get("https://5xclass.cn/course/")
#找标签
# li_list= driver.find_elements(By.XPATH, "//*[@id='bs-example-navbar-collapse-1']/ul[1]/li")
lists = driver.find_element(By.ID, "bs-example-navbar-collapse-1")
lists = lists.find_elements(By.TAG_NAME,'a')
for list in lists:
    print(list.text)

# for li in li_list:
#     a = li.find_element(By.XPATH,'a')
#     print(a.text)

#关闭浏览器
driver.close()

3.通过其他规则找标签

也可以在selenium中通过其他规则比如bs4,re等找到需要的标签。

示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup

service = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(10)

driver.get('https://car.yiche.com/')

html_string = driver.page_source

soup = BeautifulSoup(html_string, features="html.parser")
tag_list = soup.find_all(name="div", attrs={"class": "item-brand"})
for tag in tag_list:
    child = tag.find(name='div', attrs={"class": "brand-name"})
    print(child.text)

driver.close()

这里需要注意的是在selenium中找到标签后想要获得标签内的内容需要用

得到的标签.text:div.text

想要得到属性的值:div.get_attribute('属性名')

三、点击,输入操作

在找到标签后就该进行点击了

1.点击

tag.click()

2.输入

tag.send_kes(‘输入内容’)

四、携带cookie

在进行网络请求中,携带cookie是必不可少的。

driver.add_cookie({'name': 'foo', 'value': 'bar'})

name是cookie的键,而value是值

示例代码:

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)

# 注意:一定要先访问,不然Cookie无法生效
driver.get('https://dig.chouti.com/about')

# 加cookie
driver.add_cookie({
    'name': 'token',
    'value': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjZHVfNDU3OTI2NDUxNTUiLCJleHBpcmUiOiIxNzA0MzI5NDY5OTMyIn0.8n_tWcEHXsBSXWIY9rBoGWwaLPF8iWIruryhKTe5_ks'
})

# 再访问
driver.get('https://dig.chouti.com/')

time.sleep(2000)
driver.close()

这个感觉有点鸡肋了,或者我还没看到他真正的用法。

五、代理IP

selenium中的代理ip用法和requests中的有一些区别

在selenium中得到ip和端口后,需要把ip加入option中,在driver.get中放入。

示例代码:

import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
#获取ip
resp = requests.get(url = 代理)
proxy_string = resp.text
print(proxy_string)
#初始化
service = Service('./chromedriver.exe')
#实例化ChromeOptions
opt = webdriver.ChromeOptions()
#设置
opt.add_argument(f'--proxy-server={proxy_string}')
#添加
driver = webdriver.Chrome(service=service,options=opt)
#
driver.get('https://dig.chouti.com/about')
sleep(3)
driver.close()

五、特征检测和绕过

在我们用哦selenium访问网站时,状态栏位置总会显示一行字,而这就是浏览器的一些特征,有些网站会检测这些特征,检测到时自动化工具后会拒绝访问,所以在使用selenium中隐藏这些特征是必不可少的,直接看示例代码:

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

#初始化
service = Service('./chromedriver.exe')
opt = webdriver.ChromeOptions()
#禁止显示“Chrome正在受到自动测试软件的控制”等信息提示栏
opt.add_argument('--disable-infobars')
#排除 enable-automation 开关,隐藏自动化测试的痕迹,从而降低被识别为自动化程序的风险
opt.add_experimental_option("excludeSwitches", ["enable-automation"])
#禁用 Chrome 浏览器中的自动化扩展程序,这有助于减少浏览器检测到自动化测试的可能性。
opt.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(service=service,options=opt)
with open('./hide.js','r',encoding='utf-8') as f:
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": f.read()})
driver.get('https://www.baidu.com')
time.sleep(10)
driver.close()

需要注意的是示例代码中的js文件是必须要用的。

六、无头模式

无头模式就是不弹出浏览器,而让浏览器在后台慢慢执行,这一般是调试好,没有什么问题后才添加的

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service('./chromedriver.exe')
opt = webdriver.ChromeOptions()
opt.add_argument('--headless')
driver = webdriver.Chrome(service=service,options=opt)
driver.get('https://www.baidu.com')
time.sleep(5)
driver.close()

七、截图

用selenium截图估计也就验证码的时候有用了吧

找到图片标签tag后

截屏保存

tag.screenshot('./baidu.png')
截图并返回二进制信息
bady = tag.screenshot_as_png
print(f"二进制:{bady}")
截图并把二进制信息base64加密再返回
bady2 = tag.screenshot_as_base64
print(f"Base64:{bady2}")
示例代码:
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

service = Service('./chromedriver.exe')
opt = webdriver.ChromeOptions()
#opt.add_argument('--headless')
driver = webdriver.Chrome(service=service,options=opt)
driver.get('https://www.baidu.com')
tag = driver.find_element(By.XPATH, '//*[@id="head_wrapper"]/div/div')
tag.screenshot('./baidu.png')
bady = tag.screenshot_as_png
print(f"二进制:{bady}")
bady2 = tag.screenshot_as_base64
print(f"Base64:{bady2}")

time.sleep(5)
driver.close()

初学selenium还有很多没学到,以后补充。


本文转载自: https://blog.csdn.net/weixin_53984419/article/details/136993077
版权归原作者 某得感情 所有, 如有侵权,请联系我们删除。

“爬虫之selenium”的评论:

还没有评论