稳定爬虫利器selenium用法

selenium模块可以自动控制谷歌,火狐等浏览器,可以用于稳定爬虫,缺陷在于性能较差

from selenium import webdriver

#指定谷歌浏览器驱动程序路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"

#实例化一个谷歌浏览器驱动对象,传入参数为驱动程序路径
driver = webdriver.Chrome(executable_path=driver_path)

#驱动谷歌浏览器访问百度首页
driver.get("https://www.baidu.com/")

#打印访问页html源码
print(driver.page_source)

输出结果为百度首页html源码,并且会自动控制谷歌浏览器真正的去访问百度首页

driver.close() 关闭浏览器当前页面

driver.quit() 关闭整个浏览器

定位元素

  1. 根据id查找某个元素
    input_tag = driver.find_element_by_id(“kw”)将查找到百度首页搜索输入框
  2. 根据name查找某个元素
    input_tag = driver.find_element_by_name(“wd”)将查找到百度首页搜索输入框
  3. 根据class查找某个元素
    input_tag = driver.find_element_by_class_name(“s_ipt”)将查找到百度首页搜索输入框
  4. 根据xpath语法查找元素
    input_tag = driver.find_element_by_xpath("//input[@id=“kw”]")将查找到百度首页搜索输入框
  5. 根据css选择器查找元素
    input_tag = driver.find_element_by_css_selector(".quickdelete-wrap > input")将查找到百度首页搜索输入框

注:find_element是获取符合条件的第一个元素,而find_elements是获取符合条件的全部元素,以列表返回

操作表单元素

  1. input_tag.send_keys(“python”) 将在表单中填充字符串"python"
  2. input_tag.clear()将情况表单中的字符串
  3. button = driver.find_element_by_id(“su”)
    button.click() 将获取百度一下按钮,并点击该按钮
  4. 选中下拉列表
    from selenium.webdriver.support.ui import Select
    selectbtn = Select(driver.find_element_by_id(“下拉列表id”))
    selectbtn.select_by_index(1)将获取到该下拉表单,并通过索引选中其第一项或通过值by_value()或可见文本by_visible_text()选中
    selectbtn.deselect_all()将取消所有选中项

行为链

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains

#指定谷歌浏览器驱动路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"
#实例化一个谷歌浏览器驱动对象
driver = webdriver.Chrome(executable_path=driver_path)
#访问百度首页
driver.get("https://www.baidu.com/")

#获取搜索框和百度一下按钮元素
input_tag = driver.find_element_by_id("kw")
submitBtn = driver.find_element_by_id("su")

#实例化一个行为链对象
actions =  ActionChains(driver)

#鼠标移动到搜索框
actions.move_to_element(input_tag)
#发送文本到搜索框
actions.send_keys_to_element(input_tag, "python")
#鼠标移动到百度一下按钮
actions.move_to_element(submitBtn)
#点击按钮
actions.click(submitBtn)

#执行行为链
actions.perform()

cookie操作

#打印所有cookie信息
for cookie in driver.get_cookies():
    print(cookie)

print("*" * 100)
#打印指定cookie信息
print(driver.get_cookie("PSTM"))

print("*" * 100)
#删除指定cookie信息
driver.delete_cookie("PSTM")

print(driver.get_cookie("PSTM"))
#删除全部cookie信息
driver.delete_all_cookies()

隐式等待

from selenium import webdriver

#指定谷歌浏览器驱动路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"

#实例化一个谷歌浏览器驱动对象
driver = webdriver.Chrome(executable_path=driver_path)

#访问豆瓣首页
driver.get("https://www.douban.com/")

#指定隐式等待20秒
driver.implicitly_wait(20)

ele_null = driver.find_element_by_id("不存在的id")

显式等待

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

#指定谷歌浏览器驱动路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"

#实例化一个谷歌浏览器驱动对象
driver = webdriver.Chrome(executable_path=driver_path)

#访问豆瓣首页
driver.get("https://www.douban.com/")

#显式等待10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "不存在的id"))
)

所谓隐式等待即在获取某个元素前指定浏览器强制等待一定时间
而显式等待即在获取某个元素时等待一定时间,但当获取到该元素时则立即停止等待

打开多窗口和切换窗口

from selenium import webdriver

driver_path = r"D:/chromedriver_win32/chromedriver.exe"

driver = webdriver.Chrome(driver_path)

driver.get("https://www.baidu.com")

#打开多窗口访问豆瓣首页
driver.execute_script("window.open('https://www.douban.com')")

#切换到豆瓣页的窗口上
driver.switch_to_window(driver.window_handles[1])

#打印当前窗口的url
print(driver.current_url)

输出结果为
https://www.douban.com/

Process finished with exit code 0

使用代理

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=https://36.248.133.247:9999")

driver = webdriver.Chrome(executable_path=r"D:/chromedriver_win32/chromedriver.exe", chrome_options=options)

获取元素的属性

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:/chromedriver_win32/chromedriver.exe")

driver.get("http://www.baidu.com")

submit = driver.find_element_by_id("su")

print(submit.get_attribute("value"))

#获取元素的html代码
html = submit.get_attribute("outerHTML")

输出结果为
百度一下

Process finished with exit code 0

保存当前页面的截图

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:/chromedriver_win32/chromedriver.exe")

driver.get("http://www.baidu.com")

driver.save_screenshot("./data/baidu.png")

运行结果将在当前目录的data目录下保存一个名为baidu.png的截图文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值