selenium 基本使用

  1. 使用代码流程
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
  1. 截图
# 截图功能
# driver.save_screenshot('python.png')

el = driver.find_element_by_xpath('//*[@id="kw"]')
el.send_keys("百度")

el.sub = driver.find_element_by_xpath('//*[@id="form"]/span[2]')
el_sub.click()
  1. selenium前进后退

driver.back() # 后退
driver.forward() # 前进

from selenium import webdriver
import time

driver = webdriver.Chrome()

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

el = driver.find_element_by_xpath('//*[@id="kw"]')
el.send_keys('百度')

el_sub = driver.find_element_by_xpath('//*[@id="su"]')
el_sub.click()

time.sleep(1)
driver.get("http://www.renren.com")
# 执行后退,后退到百度搜索结果
driver.back()

time.sleep(1)
# 前进到163
driver.forward()

time.sleep(3)
# 关闭
driver.close()
  1. 查看请求消息
print(driver.page_source)   # 获取渲染之后的网页源代码
driver.get_cookies()
print(driver.current_url)   # 获取当前标签页的url
  1. 退出
driver.close()  # 退出当前页面
driver.quit()   # 退出浏览器
  1. selenium定位元素语法(8种)(以百度为例)
find_element 返回是一个元素 /find_elements 返回是一个包含元素的列表
find_element 找不到元素会报错 /find_elements 匹配不到会返回一个空列表
by_link_text 根据链接文本获取元素列表(文本必须是完整的,全部文本) / by_partial_link_text 根据链接包含的文本获取元素(文本可以是不完整的的,包含某个文本)
通过标签可以定位(find_element(s)_by_tag_name('h1'))到动态的iframe
① #  通过xpath定位元素 (返回一个包含元素的列表)
el = driver.find_element(s)_by_xpath('//*[@id="kw"]')# 通过id定位元素 (返回一个元素)
el = driver.find_element_by_id('kw')# 通过 name 定位  (返回一个元素)
el = driver.find_element(s)_by_name('wd')# 通过 class 定位元素  (根据类名获取元素列表)
el = driver.find_element(s)_by_class_name('s_ipt')# 通过css选择器进行元素定位 类选择
el = driver.find_element(s)_by_css_selector('#kw')# (根据连接文本获取元素列表) 因为是链接可以在触发点击
el = driver.find_element(s)_by_link_text('hao123')# (根据链接包含的文本获取元素列表)
el = driver.find_element(s)_by_partial_link_text('hao')# (根据标签名获取元素列表)
el = driver.find_element(s)_by_tag_name('h1')
  1. 获取数据语法
    find_element 仅仅能够获取元素,不能直接获取其中的数据,find_element_by_xpath 也是一样
    获取文本:element.text
    获取属性值:element.get_attribute("href")
    数据提取:print(el.text,el.get_attribute('href'))
el.driver.find_element_by_xpath('xxxxxx')  # input/text标签
el.send_keys('传智播客') # 括号里有什么就会向输入框里输入什么
  1. 标签切换(标签窗口)
    有些时候如果没有进行标签切换是定位不到元素的,使用句柄,从而达到切换标签的目的,在一定程度上句柄具有唯一性
# window_handles中保存所有的窗口/标签句柄
print(driver.window_handles)

# 切换窗口句柄,从而切换控制的标签
driver.switch_to.window(driver.window_handles[-1])
  1. iframe标签(属于一种框架)
    在一个HTML标签中嵌套另一个HTML标签,selenium只能定位到iframe标签,并不能定位到内部的标签
    切换到框架中有两种方法:

一. 通过框架的id值尽心切换
driver.switch_to.frame(‘id值’)
二. 通过元素定位进行切换
el_frame = driver.find_element_by_xpath(‘xxx’)
driver.switch_to.frame(el_frame)
三. 在有些时候会遇到iframe内部只有id,且id位动态,这时候可以通过标签可以定位(find_element(s)_by_tag_name(‘h1’))到动态的iframe

  1. selenium对于cookie的处理
driver.find_element_by_id('email').send_keys('账号')
driver.find_element_by_id('assword').send_keys('密码')
driver.find_element_by_id('login').click

get_cookies()  # 会获取浏览器记录的所有cookie列表
cookies_list = driver.get_cookies()
cookies = {}
for cookie in cookies_list:
    cookies[cookie['name']] = cookie['value']
print(cookies)

# 可以用做requests直接用这种形式来获取cooie
session = requests.session()
session.get(url,cookies=cookies)

字典推导式:cookies_dict = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}

删除一条cookie:
driver.delete_cookie('CookieName')

删除所有cookie
driver.delete_all_cookies()
  1. 使用selenium控制浏览器执行js代码
from selenium import webdriver

url = 'https://taizhou.lianjia.com/'
driver = webdriver.Chrome()
driver.get(url)

# x:水平移动多少像素,y:垂直移动多少像素
#scroll_js = 'scrollTo(x,y)'  
scroll_js = 'scrollTo(0,500)'
driver.execute_script() 实现向下移动的动作
driver.execute_script(scroll_js)

# el_img = driver.find_element_by_xpath('/html/body/div[2]/ul/li/a/img')
# el_img.click()
el_link = driver.find_element_by_xpath('/html/body/div[2]/ul/li/a')
el_link.click()
  1. 页面等待
页面等待(等页面渲染完毕之后在进行元素定位)
强制等待:time.sleep(3) 等待 3 秒
显示等待:指定某个元素,其他的元素不会管,
隐式等待:implicitly_wait(3) 等待3秒,在3秒时间内去一直定位,当定位到了就执行如果超过3秒还没有定位到在报错,有些类似于超时,像有些ajax请求可以用到会有一定的缓冲时间
from selenium import webdriver

url = 'http://www.baidu.com'
driver = webdriver.Chrome()

driver.implicitly_wait(10) # 隐式等待
driver.get(url)
driver.find_element_by_xpath('//*[@id="lg"]/img[10000]')
  1. 浏览器配置
    代理服务器和开启无界面模式(无头模式)
from selenium import webdriver

# 创建配置对象
opt = webdriver.ChromeOptions()

# 配置配置对象
# opt.add_argument("--headless")  # 设置无头
# opt.add_argument("--disable-gpu")  # 设置关闭gpu

# opt.add_argument('--proxy-server=http://119.180.141.181:8060')  # 配置对象添加使用代理ip的命令

opt.add_argument('--user-agent=Mozilla/5.0 HAHA')  # 设置user-agent

# 创建浏览器对象的时候将配置对象添加
driver = webdriver.Chrome(chrome_options=opt)

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

# driver.save_screenshot("itcast.png")  # 屏幕截屏
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值