selenium基础(续,主要以演示代码为主)

安装:

  • Chromedriver
    • 操作系统 chrome chromedriver 三者版本要相同
    • pip install selenium

selenium的优缺点

缺点:慢,大
优点:自动处理js
# 利用selenium构建cookie池,再利用requests模块携带cookie去发送请求

页面等待
手动实现显示等待:按照规定的次数,规定的频率,不断判断某个标签是否存在,如果存在就向下执行,不存在就继续循环

import time
from selenium import webdriver

driver = webdriver.Chrome('/home/worker/Desktop/driver/chromedriver')
driver.get("https://www.taobao.com/")

n = 0
while 1:
    n += 1
    # 向下移动页面
    js = 'window.scrollTo(0,{})'.format(500*n)
    driver.execute_script(js)
    time.sleep(1)
    try:
        element = driver.find_element_by_xpath('//div[@class="goods-inner"]/h3[1]/p[1]/span[2]')
        print(element.text)
        break
    except:
        pass

driver.quit()

switch切换标签页
# 1. 获取当前所有的窗口
current_windows = driver.window_handles
# 2. 根据窗口索引进行切换
driver.switch_to.window(current_windows[1])

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

time.sleep(3)

# 通过执行js来新开一个标签页
js = 'window.open("https://www.sogou.com");'
driver.execute_script(js)
time.sleep(2)

print(driver.current_url)

#  1. 获取当前所有窗口
windows = driver.window_handles
print(windows)

time.sleep(2)

# 2. 根据窗口索引进行切换
driver.switch_to.window(windows[0])
time.sleep(2)
driver.switch_to.window(windows[1])

time.sleep(6)
driver.quit()

switch切换frame标签

iframe是html中常见的一种技术,即一个页面中嵌套了另一个网页,
selenium默认是访问不了frame中的内容的,对应的解决思路是 driver.switch_to.frame()

# 1. 切入frame标签
login_frame = driver.find_element_by_id('login_frame') # 定位frame标签
driver.switch_to.frame(login_frame) # 转向到该frame中

# 2. 切出frame标签:切换到标签页的默认焦点位置
driver.switch_to.window(driver.window_handles[0])
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://mail.qq.com')

# 定位frame标签
frame_element = driver.find_element_by_id('login_frame')

# 切入frame中
driver.switch_to.frame(frame_element)
time.sleep(2)

# 定位账号标签位置 输入账号
driver.find_element_by_id('u').send_keys('1691598339')
time.sleep(2)

# 定位密码标签位置 输入密码
driver.find_element_by_id('p').send_keys('XXXXXXXXX')

time.sleep(2)

# 定位登录按钮的位置 点击
driver.find_element_by_id('login_button').click()

# 切出frame标签
window_list = driver.window_handles
driver.switch_to.window(window_list)

# 定位提取文本
content = driver.find_element_by_class_name('login_pictures_title').text
print(content)

driver.quit()

chromedriver的无界面(headless)模式

options = webdriver.ChromeOptions() # 创建一个配置对象
options.add_argument("--headless") # 开启无界面模式
options.add_argument("--disable-gpu")  # 可选项:禁用gpu,可以解决一些莫名
driver = selenium.webdriver.Chrome(Chromedriver_path,chrome_options=option)
# options.set_headles() # 无界面模式的另一种开启方式
driver = webdriver.Chrome('./chromedriver',chrome_options=options)
	from selenium import webdriver

    option = webdriver.ChromeOptions()
    option.add_argument('--headless') # 开启无界面模式
    option.add_argument('--disable-gpu') # 禁用显卡

    driver = webdriver.Chrome(chrome_options=option)

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

    print(driver.page_source)
    driver.quit()

替换ua和使用代理

chromedriver更换User-Agent
options  = webdriver.ChromeOptions() # 创建一个配置对象
options.add_argument("--user-agent=Mozilla/5.0 HAHA")
driver = selenium.webdriver.Chrome(chromedriver_path,
 								   chrome_options=option)

使用代理

options.add_argument("--proxy-sever=http://ip:port")
from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument('--headless') # 开启无界面模式
option.add_argument('--disable-gpu') # 禁用显卡
option.add_argument('--user-agent=HAHA woshi python jiuye na ge ban de nicai') # 替换UA
option.add_argument('--proxy-server=http://219.234.5.128:3128') # 使用代理
driver = webdriver.Chrome('/home/worker/Desktop/driver/chromedriver',
                          chrome_options=option)
driver.get('http://www.itcast.cn')

print(driver.page_source)
driver.quit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值