python3爬虫学习之selenium+chromedriver基础

现在大多网站都运用了Ajax渲染,那么用以前的方法去分析爬取就会有一定的困难

关于Ajax,可以看这里:

https://baike.baidu.com/item/ajax/8425?fr=aladdin

这里介绍的selenium+chromedriver就能帮我们解决Ajax爬取分析的困难,这里介绍一下基础用法

首先,我们需要安装selenium,这个很简单,pip即可,推荐换源安装,更快更爽

我们需要下载chromedriver,要求与你的chrome浏览器版本适配,这个是个exe文件,无需安装,放在你常用的文件夹即可,需要注意的是·,我们尽量避免路径含有中文字符,空白格等特殊字符。

我的放在这里:

来测试一下

from selenium import webdriver

# 获取chromedriver的位置
driver_path = r"D:\pythontools\chromedriver.exe"

driver = webdriver.Chrome(executable_path=driver_path)
#传入链接
driver.get("https://www.baidu.com/")

我们可以看见,成功打开了百度首页:

下面我们开始介绍常用方法

一:基本方法,功能将放在代码的注释行中

 

import time

from selenium import webdriver

# 获取chromedriver的位置
driver_path = r"D:\pythontools\chromedriver.exe"

driver = webdriver.Chrome(executable_path=driver_path)
#传入链接
driver.get("https://www.baidu.com/")

# 该方法获取网页源代码
print(driver.page_source)
# 打开网页后滞留3秒
time.sleep(3)
# 关闭当前网页
driver.close()
# 关闭整个浏览器
driver.quit()

二:定位元素的方法,以及获取元素的一些属性

import time

from selenium import webdriver

from selenium.webdriver.common.by import By
# 获取chromedriver的位置
driver_path = r"D:\pythontools\chromedriver.exe"

driver = webdriver.Chrome(executable_path=driver_path)
#传入链接
driver.get("https://www.baidu.com/")

# 获取百度首页输入框
# id 定位元素
inputTag = driver.find_element_by_id("kw")
inputTag = driver.find_element(By.ID,"kw")
# name 定位元素
inputTag = driver.find_element_by_name("wd")
inputTag = driver.find_element(By.NAME,"wd")
# xpath 定位元素
inputTag = driver.find_element_by_xpath("//input[@id='kw']")
inputTag = driver.find_element(By.XPATH,"//input[@id='kw']")
# class_name 定位元素
inputTag = driver.find_element_by_class_name("s_ipt")
inputTag = driver.find_element(By.CLASS_NAME,"s_ipt")
# css_selector 定位元素     父标签的class属性 > 需要定位的标签
inputTag = driver.find_element_by_css_selector(".quickdelete-wrap > input")
# 向输入框传值
inputTag.send_keys("虎牙")
# 获取id
print(inputTag.id)
# 获取位置
print(inputTag.location)
# 获取标签名
print(inputTag.tag_name)
# 获取大小
print(inputTag.size)
time.sleep(3)
driver.quit()

以上罗列了获取标签的常用方法,以及获取属性的方法

三:操作表单元素

1,操作输入框,这里以百度输入框为例

import time

from selenium import webdriver

# 获取chromedriver的位置
driver_path = r"D:\pythontools\chromedriver.exe"

driver = webdriver.Chrome(executable_path=driver_path)
#传入链接
driver.get("https://www.baidu.com/")
# 1 ,操作输入框
# 1.1,获取输入框
# 1.2,向输入框传值
# 1.3,清空输入框
inputTag = driver.find_element_by_id("kw")
inputTag.send_keys("虎牙")
time.sleep(3)
inputTag.clear()
time.sleep(3)
driver.quit()

2,操作checkbox,这里没有给出示例网站,大家可以自己去尝试

import time
from selenium import webdriver

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("")

#定位checkbox元素
rememberBtn = driver.find_element_by_xpath('//input[@id=""]')
#该方法第一次勾选
rememberBtn.click()
time.sleep(3)
#第二次取消勾选
rememberBtn.click()
time.sleep(3)
driver.quit()

3,操作select,这里给出了三种获取方法

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("") #传入链接

selectBtn = Select(driver.find_element_by_name(""))
#根据下标获取
selectBtn.select_by_index()
#根据网页标签的value获取
selectBtn.select_by_value("")
#根据可见文本
selectBtn.select_by_visible_text("")
#取消所有选中
selectBtn.deselect_all()

4,操作按钮,如:百度一下

from selenium import webdriver
import time

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("https://www.baidu.com/")

inputTag = driver.find_element_by_name("wd")
inputTag.send_keys("虎牙")
s_btn = driver.find_element_by_id("su")
s_btn.click()
time.sleep(3)
driver.quit()

5,行为链

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

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("https://www.baidu.com/")

inputTag = driver.find_element_by_name("wd")
s_btn = driver.find_element_by_id("su")

action = ActionChains(driver)
#将鼠标移动到输入框
action.move_to_element(inputTag)
#向输入框传值
action.send_keys_to_element(inputTag,"虎牙")
#将鼠标移动到搜索按钮
action.move_to_element(s_btn)
#点击搜索按钮
action.click(s_btn)
#执行行为链
action.perform()
time.sleep(3)
driver.quit()

四:操作cookies

from selenium import webdriver

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("https://www.baidu.com/")

#获取所有cookie并遍历
for cookie in driver.get_cookies():
    print(cookie)
print("*"*50)
#利用cookie的key获取value
print(driver.get_cookie("BD_HOME"))
print("*"*50)
#删除某个cookie
driver.delete_cookie("BD_HOME")
for cookie in driver.get_cookies():
    print(cookie)
print("*" * 50)
#删除所有cookie
driver.delete_all_cookies()
for cookie in driver.get_cookies():
    print(cookie)

driver.quit()

五:显式等待和隐式等待

1,隐式等待,指定一个等待时间,如果该时间内未找到指定节点,则在等待时间结束后抛出异常

from selenium import webdriver

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")
inputTag = driver.find_element_by_name("wd")
print(inputTag)
driver.quit()

2,显式等待,指定一个最长等待时间,如果该时间内找到指定节点,返回,如果在最长时间内未找到节点,抛出异常,显式等待是常用等待

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

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("https://www.taobao.com/")
wait = WebDriverWait(driver,10)
inputTag = wait.until(
    EC.presence_of_element_located((By.ID,'q'))
)
butTag = wait.until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search'))
)
print(inputTag,butTag)
driver.quit()

六,打开多个窗口和切换窗口

from selenium import webdriver

driver_path = r"D:\pythontools\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("https://www.baidu.com/")
#新开页面错误演示
# driver.get("https://www.taobao.com/")
driver.execute_script("window.open('https://www.taobao.com/')")
#虽然新界面淘宝被打开,但此时driver的位置依旧在百度页面,验证如下
print(driver.current_url)
#切换界面
driver.switch_to.window(driver.window_handles[1])
print(driver.current_url)
#window_handles里面存储的是窗口句柄,它是一个列表,打印如下:
print(driver.window_handles)

这里注意,以前的方法弃用了,只能用to.window

七:使用代理,因为免费代理不稳定,要试很久,所以这里不再给出

from selenium import webdriver

driver_path = r"D:\pythontools\chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://+代理ip+端口号")

driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get("http://httpbin.org/ip")

以上罗列了基本用法,欢迎指正补充。━(*`∀´*)ノ亻!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值