Python教程

Python爬虫selenium

本文主要是介绍Python爬虫selenium,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

selenium定位标签并提取数据

driver对象常用的属性和方法

driver对象定位标签元素获取标签对象的方法

selenium其他使用方法

selenium控制标签页的切换

 selenium控制iframe的切换

 利用selenium获取cookie的方法

 页面等待

 selenium控制浏览器执行js代码的方法

 selenium开启无界面模式

 selenium使用代理ip

了解 selenium替换user-agent


selenium定位标签并提取数据

driver对象常用的属性和方法

  • driver.page_source 当前标签页浏览器渲染之后的网页源代码

  • driver.current_url 当前标签页的url

  • driver.close() 关闭当前标签页,如果只有一个标签页则关闭整个浏览器

  • driver.quit() 关闭浏览器

  • driver.forward() 页面前进

  • driver.back() 页面后退

  • driver.screen_shot(img_name) 页面截图

driver对象定位标签元素获取标签对象的方法

find_element_by_id                         (返回一个元素)
find_element(s)_by_class_name             (根据类名获取元素列表)
find_element(s)_by_name                 (根据标签的name属性值返回包含标签对象元素的列表)
find_element(s)_by_xpath                 (返回一个包含元素的列表)
find_element(s)_by_link_text             (根据连接文本获取元素列表)
find_element(s)_by_partial_link_text     (根据链接包含的文本获取元素列表)
find_element(s)_by_tag_name             (根据标签名获取元素列表)
find_element(s)_by_css_selector         (根据css选择器来获取元素列表)

注意:

  • find_element和find_elements的区别:
    • 多了个s就返回列表,没有s就返回匹配到的第一个标签对象
    • find_element匹配不到就抛出异常,find_elements匹配不到就返回空列表
  • by_link_text和by_partial_link_tex的区别:全部文本和包含某个文本
  • 以上函数的使用方法
    • driver.find_element_by_id('id_str')
from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.itcast.cn/')

ret = driver.find_elements_by_tag_name('h2')
print(ret[0].text) # 

ret = driver.find_elements_by_link_text('黑马程序员')
print(ret[0].get_attribute('href'))

driver.quit()

 标签对象提取文本内容和属性值

  • 对元素执行点击操作element.click()

    • 对定位到的标签对象进行点击操作
  • 向输入框输入数据element.send_keys(data)

    • 对定位到的标签对象输入数据
  • 获取文本element.text

    • 通过定位获取的标签对象的text属性,获取文本内容
  • 获取属性值element.get_attribute("属性名")

    • 通过定位获取的标签对象的get_attribute函数,传入属性名,来获取属性的值
  • 代码实现,如下

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.itcast.cn/')

ret = driver.find_elements_by_tag_name('h2')
print(ret[0].text) # 

ret = driver.find_elements_by_link_text('黑马程序员')
print(ret[0].get_attribute('href'))

driver.quit()

selenium其他使用方法

  • selenium控制标签页的切换

# 1. 获取当前所有的标签页的句柄构成的列表
current_windows = driver.window_handles

# 2. 根据标签页句柄列表索引下标进行切换
driver.switch_to.window(current_windows[0])
  •  selenium控制iframe的切换

import time
from selenium import webdriver

driver = webdriver.Chrome()

url = 'https://mail.qq.com/cgi-bin/loginpage'
driver.get(url)
time.sleep(2)

login_frame = driver.find_element_by_id('login_frame') # 根据id定位 frame元素
driver.switch_to.frame(login_frame) # 转向到该frame中

driver.find_element_by_xpath('//*[@id="u"]').send_keys('1596930226@qq.com')
time.sleep(2)

driver.find_element_by_xpath('//*[@id="p"]').send_keys('hahamimashicuode')
time.sleep(2)

driver.find_element_by_xpath('//*[@id="login_button"]').click()
time.sleep(2)

"""操作frame外边的元素需要切换出去"""
windows = driver.window_handles
driver.switch_to.window(windows[0])

content = driver.find_element_by_class_name('login_pictures_title').text
print(content)

driver.quit()
  •  利用selenium获取cookie的方法

# 获取当前标签页的全部cookie信息
print(driver.get_cookies())

# 把cookie转化为字典
cookies_dict = {cookie[‘name’]: cookie[‘value’] for cookie in driver.get_cookies()}

#删除一条cookie
driver.delete_cookie("CookieName")

# 删除所有的cookie
driver.delete_all_cookies()
  •  页面等待

  • 强制等待
  • time.sleep()
    
    缺点时不智能,设置的时间太短,元素还没有加载出来;设置的时间太长,则会浪费时间
  • 隐式等待
  • from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.implicitly_wait(10) # 隐式等待,最长等10秒
    
    driver.get('https://www.baidu.com')
    
    # 针对的是定位元素,如果在规定的时间内找到了标签,那么程序就正常往下执行,
    # 如果在规定时间内内,没有找到元素,抛出异常  NoSuchElementException
    driver.find_element_by_xpath('//input')
  • 显示等待
  • from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.baidu.com')
    
    # 显式等待
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.LINK_TEXT, 'hao123')))
    # 参数20表示最长等待20秒
    # 参数0.5表示0.5秒检查一次规定的标签是否存在
    # EC.presence_of_element_located((By.LINK_TEXT, '好123')) 表示通过链接文本内容定位标签
    # 每0.5秒一次检查,通过链接文本内容定位标签是否存在,如果存在就向下继续执行;如果不存在,直到20秒上限就抛出异常
    # 找不到会抛出 TimeoutException 超时的异常
    
    print(driver.find_element_by_link_text('hao123').get_attribute('href'))
    driver.quit()

  •  selenium控制浏览器执行js代码的方法

import time

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

driver.get('http://www.itcast.cn')

# 准备好要执行的js代码
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)

time.sleep(3)
driver.quit()
  •  selenium开启无界面模式

from selenium import webdriver

options = webdriver.ChromeOptions() # 创建一个配置对象
options.add_argument("--headless") # 开启无界面模式
options.add_argument("--disable-gpu") # 禁用gpu

# options.set_headles() # 无界面模式的另外一种开启方式
driver = webdriver.Chrome(chrome_options=options) # 实例化带有配置的driver对象

driver.get('http://www.itcast.cn')
print(driver.title)
driver.quit()
  •  selenium使用代理ip

from selenium import webdriver

options = webdriver.ChromeOptions() # 创建一个配置对象

# 2. 添加一些选项
options.add_argument('--headless')

# 因为开启了无界面模式,也就不需要让gpu去渲染页面,禁用gpu
options.add_argument('--disable-gpu')

options.add_argument('--proxy-server=http://202.20.16.82:9527') # 使用代理ip

driver = webdriver.Chrome(chrome_options=options) # 实例化带有配置的driver对象

driver.get('http://www.itcast.cn')
print(driver.title)
driver.quit()
  • 了解 selenium替换user-agent

from selenium import webdriver

options = webdriver.ChromeOptions() # 创建一个配置对象
options.add_argument('--user-agent=Mozilla/5.0 HAHA') # 替换User-Agent

driver = webdriver.Chrome('./chromedriver', chrome_options=options)

driver.get('http://www.itcast.cn')
print(driver.title)
driver.quit()

这篇关于Python爬虫selenium的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!