Python爬虫实战(6)Selenium教程

文章目录

  • 安装
  • 基本操作
  • 定位元素
  • 表单操作
    • 操作输入框
    • 操作Checkbox
    • 操作Select
  • 行为链
  • Cookie操作
  • 切换页面
  • 设置代理IP

利用selenium可以模拟浏览器操作,降低爬虫被禁的概率。

运行平台: Windows
Python版本: Python 3.8
IDE: Pycharm

这篇主要是对一些selenium基本操作的介绍

安装

       1.Python3.X版本中自带PIP,我们使用PIP安装selenium。Win+R打开命令行,输入cmd进入,输入 pip install selenium即可,它会自动安装
       2.我们还需要浏览器驱动,以chrome浏览器为例,打开网页搜索chromedriver,选择自己所需的版本,解压出一个exe文件,把它放在一个纯英文的路径中就可以。写代码时,把这个路径写进去就行了,Python会自动使用的。如下面的代码。

基本操作

import time
from selenium import webdriver

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)

driver.get('https://www.baidu.com')  # 打开网页
print(driver.page_source) # 得到网页源码
time.sleep(5)
driver.close()  # 关闭当前标签页
time.sleep(3)
driver.quit()  # 关闭所有标签页,退出浏览器

.get():打开网页
.page_source :得到网页源码
.close():关闭当前标签页
.quit():关闭所有标签页,退出浏览器

定位元素

from selenium import webdriver

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com')
inputTag = driver.find_element_by_name('wd')
inputTag = driver.find_element_by_id('kw')
inputTag = driver.find_element_by_class_name('s_ipt')
inputTag.send_keys('python')

.find_element_by_name():使用name定位元素
.find_element_by_id():使用id定位元素
.find_element_by_class_name():使用类名定位元素
.send_key():使用内容填充,定位到的元素
.find_element_ 适用于查找第一个元素,find_elements_ 适用于查找所有符合条件的元素。

这段代码的效果就是python输入百度的搜索框(3种定位方式选择1种就可以)

表单操作

操作输入框

import time
from selenium import webdriver

driver_path = r'E:\PythonProject\Spider\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('python')
time.sleep(3)
inputTag.clear()  # 清除输入框的内容

操作输入框,分两步:
第一步:找到该元素.
第二步:使用send_keys(value),将数据填充进去.

这段代码的效果就是python输入百度的搜索框,三秒后消除输入框的内容。

操作Checkbox

import time
from selenium import webdriver

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)

driver.get('https://accounts.douban.com/passport/login?source=main')
inputTag = driver.find_element_by_id('account-form-remember')
inputTag.click()
time.sleep(3)
inputTag.click()

.click():可以实现鼠标左键单击效果
.click_and_hold() :点击但不松开鼠标
.context_click() :右键单击
.double_click() :双击

要选中checkbox标签,在网页中是通过鼠标点击,因此想要选中checkbox标签,要先找到该元素,然后执行click()事件

这段代码的效果就是打开豆瓣的登陆界面选择下次自动登录,暂停3s后,取消勾选。

操作Select

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

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)

driver.get('https://www.ctrip.com/')
selectBtn = Select(driver.find_element_by_id('J_roomCountList'))
selectBtn.select_by_index(3)  # 使用索引值
selectBtn.select_by_value('')  # 使用值
selectBtn.select_by_visible_text('')  # 使用文本

.select_by_index():使用索引值选择下拉框中的内容
.select_by_value(’’) :使用值选择下拉框中的内容
.select_by_visible_text(’’) :使用文本选择下拉框中的内容

select不能直接点击.因为点击后还要选中元素.
这时候selenium专门为select标签提供一个类selenium.webdriver.support.ui.select.
将获取到的元素当成参数传入这个类中,创建这个对象,然后就可以使用这个对象进行选择了.

这段代码的效果是打开携程首页,在房间间数选择4间。(3种方法选择其中1种就可以了)

行为链

有时候网页的操作可能要有很多步,那么这时候可以使用鼠标行为链ActionChain完成.

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

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)

driver.get('https://www.baidu.com')
inputTag = driver.find_element_by_id('kw')
submitBtn = driver.find_element_by_id('su')

actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag, 'python')
actions.move_to_element(submitBtn)
actions.click()
actions.perform()  # 执行上述的行为链

这段代码的效果就是打开百度网页,在输入框输入python点击搜索。

Cookie操作

from selenium import webdriver

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com')

for cookie in driver.get_cookies():
    print(cookie)  # 获取所有的cookie

value = driver.get_cookie('key')  # 根据cookie的key获取value
driver.delete_all_cookies()  # 删除所有cookie
driver.delete_cookie('key')  # 删除某个cookie值

切换页面

from selenium import webdriver

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)

driver.get('https://www.baidu.com')
driver.execute_script("window.open('https://www.douban.com')")  # 打开一个新的网页
print(driver.current_url)  # 说明虽然在窗口中切换到了新的页面,但是driver中还没有切换,所以要用switch_to.window
driver.switch_to.window(driver.window_handles[1])  # 切换网页,window_handles代表网页的创建顺序
print(driver.current_url)

虽然使用execute_script() 打开了一个新的网页,但是通过**.current_url** 可以看到实际浏览器访问的网页还是百度,所以要使用 .switch_to.window() 切换到当前网页。

设置代理IP

from selenium import webdriver

driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)

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

driver = webdriver.Chrome(executable_path=driver_path, options=options)
driver.get('https://www.ipip.net/ip.html')

这段代码的效果就是打开代理后的网页,查看IP信息。

你可能感兴趣的:(Python爬虫,Python,Selenium)