selenium的学习和使用

1.Selenium+Chrome的配置

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

# 实例化对象
option = Options()

# 配置无界面谷歌浏览器
# option.add_argument('--headless')

# 启动开发者模式(关闭chrome控制)
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option("useAutomationExtension", 'False')

# 调用谷歌浏览器
driver = webdriver.Chrome(r'E:\chromedriver\chromedriver.exe', options=option)

# 发起请求
driver.get('https://www.baidu.com')

#最大窗口化
# 注意:爬虫最好将窗口最大化后再进行抓取
# 原因:如果获取的数据如果在窗口中没有,可能会获取不到
driver.maximize_window()

注意:

1. selenium运行速度非常慢,如果不是特别需要,尽量不使用selenium

2. 使用selenium之后,尽可能不要使用selenium的提取数据的方法

3. selenium主要用于页面的请求

2.Selenium+PhantomJS(无界面浏览器)的组合使用

# 安装:pip install selenium

# selenium的使用步骤:
# 1. 导入webdriver
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# 2. 调用浏览器
driver = webdriver.PhantomJS(executable_path=r'D:\phantomjs-2.1.1-windows\bin\phantomjs.exe')

# 3. 访问网址
driver.get(url='https://www.baidu.com/')

# 4. 方法及属性
# 4.1 title  获取网页标题
# print(driver.title)

# 4.2 current_url  获取当前请求的URL
# print(driver.current_url)


# 4.3 page_source  获取页面内容
# print(driver.page_source)


# 4.4 get_cookies()  获取cookie
# print(driver.get_cookies())


# 4.5 查找元素
# 4.5.1 根据id查找元素
# find_element_by_id('id值')
# kw = driver.find_element_by_id('kw')
# print(kw)  # <selenium.webdriver.remote.webelement.WebElement (session="2362c650-d4bf-11eb-9f3d-0d52f2b7d981", element=":wdc:1624520297180")>

# 4.5.2 根据class查找元素
# find_element_by_class_name('类名')   查找第一个符合类名的元素
# find_elements_by_class_name('类名')   返回列表,查找所有符合类名的元素
# s_ipt = driver.find_elements_by_class_name('s_ipt')
# print(s_ipt)  # [<selenium.webdriver.remote.webelement.WebElement (session="805f3fa0-d4bf-11eb-946f-7fab7674449d", element=":wdc:1624520453128")>]

# s_ipt = driver.find_element_by_class_name('s_ipt')
# print(s_ipt)


# 4.5.3 根据xpath来查找元素
# find_element_by_xpath('xpath的路径')
# find_elements_by_xpath('xpath的路径')

# res = driver.find_element_by_xpath('//input[@id="kw"]')
# print(res)


# 4.6 text  获取标签之间的内容
# content = driver.find_element_by_id('s-top-left').text
# content = driver.find_element_by_xpath('//div[@id="s-top-left"]').text
# print(content)


# 4.7 get_attribute('属性名')
# print(driver.find_element_by_id('kw').get_attribute('class'))


# 4.8 截图
# save_screenshot()
# driver.save_screenshot('baidu.png')



# 4.9 send_keys('输入的内容')
# 步骤:
# 1.先获取文本框
# 2.再输入内容
# driver.find_element_by_xpath('//input[@id="kw"]').send_keys('金所炫')
# driver.save_screenshot('输入.png')


# 4.10 click()  点击
# driver.find_element_by_id('su').click()
# time.sleep(2)
# driver.save_screenshot('点击.png')


# 4.11 支持快捷键
driver.find_element_by_id('kw').send_keys('金所炫')
driver.save_screenshot('全选之前.png')
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
driver.save_screenshot('全选.png')
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')
driver.save_screenshot('剪切.png')

 3.selenium反爬处理

    浏览器能够识别当前操作是人为,还是selenium操作 ,如果window.navigator.webdriver=True时说明控制浏览器的是selenium,因此如何解决这个问题是反爬必要的一步。个人推荐方法2,它是封装好的可以绕过webdriver检测的js代码。js下载地址:https://files.cnblogs.com/files/Liu928011/stealth.min.js

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r'D:\chrome\chromedriver.exe')

# 方法1、处理selenium中webdriver特征值 # driver.execute_cdp_cmd( # 'Page.addScriptToEvaluateOnNewDocument', # { # 'source':'Object.defineProperty(navigator,"webdriver",{get:()=>undefined})' # } # ) # 方法2、读取js文件内容 with open('stealth.min.js','r',encoding='utf-8') as fp: content = fp.read() driver.execute_cdp_cmd( 'Page.addScriptToEvaluateOnNewDocument', { 'source':content } ) driver.get('https://www.baidu.com')

4.selenium应用过程中遇到的问题

1.IE浏览器中的SSL认证问题

 # IE如果出现私密连接的提示,解决办法添加下面代码
  driver.execute_script("javascript:document.getElementById('overridelink').click()")

2.如果driver.find_element_by_id('id名').click(),无效,解决办法,改用js单击

driver.execute_script("document.getElementById('id名').click()")
原文地址:https://www.cnblogs.com/Liu928011/p/14929076.html