天天看点

从0学爬虫-selenium

作者:intcombo

selenium是一个web的自动化测试工具,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面

1.首先需要安装chromedriver驱动。

chromedriver是一个驱动Chrome浏览器的驱动程序,先下载驱动

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

找到自己Chrome对应的版本,将解压后的chromedriver.exe文件放到python的根目录下即可。

2.敲代码

注意:selenium4.x的语法与老版本略有不同,我的是4.1.0

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 实例化浏览器
driver = webdriver.Chrome() 
# 发送请求
url = 'https://www.baidu.com/'
driver.get(url)
# 页面的最大化
driver.maximize_window() 
# 页面操作
driver.page_source      # 页面源码
driver.get_cookies()    # 获取cookie
driver.current_url      # 当前请求的URL地址
driver.back() #后退
driver.forward() # 前进
driver.save_screenshot('img.png') # 页面截图,另存为img.png

# 定位元素,可以根据ID定位,也可以根据class_name定位,也可以使用xpath语法
driver.find_element(By.ID,'su')
driver.find_element(By.CLASS_NAME,'su')
driver.find_element(By.XPATH,'//div')
# 操作
driver.find_element(By.ID,"kw").send_keys("长城") # 输入长城
driver.find_element(By.ID,"su").click() # 点击
# 要注意,想要获取所有满足条件的元素,需要用find_elements。           

行为链

#前略
# 定位百度的输入框
input = driver.find_element(By.ID,"kw")
# 定位百度按钮
btntag = driver.find_element(By.ID,"su").click()
# 实例化行为链
actions = ActionChains(driver)
# 在定位好的输入框输入内容
actions.send_keys_to_element(input,'python')
# 点击
actions.move_to_element(btntag)
actions.click()
# 执行所有存储的操作。
actions.perform()           

页面等待,等待元素

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()
driver.get("https://www.baidu.com/")

wait = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "su"))
 )           

其他的等待条件

  • presence_of_element_located:某个元素已经加载完毕了。
  • presence_of_all_elements_located:网页中所有满足条件的元素都加载完毕了。
  • element_to_be_clickable:某个元素是可以点击了。

去除识别

from selenium.webdriver import ChromeOptions
# 去除识别
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=option)
driver.get('https://www.baidu.com/')
# 特征识别
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)           

继续阅读