微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python爬虫selenium

目录

selenium定位标签并提取数据

driver对象常用的属性和方法

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

selenium其他使用方法

selenium控制标签页的切换

 selenium控制iframe的切换

 利用selenium获取cookie的方法

 页面等待

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

 selenium开启无界面模式

 selenium使用代理ip

了解 selenium替换user-agent


selenium定位标签提取数据

driver对象常用的属性方法

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()

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

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('[email protected]')
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()
# 获取当前标签页的全部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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐