selenium模块的基本使用

selenium模块的基本使用

问题:selenium模块和爬虫之间具体怎样的联系?

答:

  • 便捷获取网站中动态加载的数据

  • 便捷实现模拟登录

问题:什么是selenium模块?

答:

  • 基于浏览器自动化的一个模块

selenium使用流程:

  1. 环境安装:pip install selenium

  2. 下载一个浏览器的驱动程序(谷歌浏览器)

  3. 实例化一个浏览器对象:

    from selenium import webdriver
    from lxml import etree
    from time import sleep
    ​
    bro = webdriver.Chrome(executable_path='chromedriver')
    #实例化一个浏览器对象(传入浏览器驱动器)
    ​
    bro.get('http://scxk.nmpa.gov.cn:81/xk/')
    #浏览器发起一个get请求
    ​
    page_text = bro.page_source
    #page_source获取浏览器当前页面的页面源码数据
    ​
    #获取企业名称
    tree = etree.HTML(page_text)
    li_list = tree.xpath('.//ul[@id="gzlist"]/li')
    for li in li_list:
        name = li.xpath('./dl/@title')[0]
        print(name)
    sleep(5)
    ​
    bro.quit()
    #关闭浏览器4.
  1. 编写基于浏览器自动化的操作代码

    1. 发起请求:get(url)

    2. 标签定位:find系列的方法

    3. 标签交互:send_key('xxx')

    4. 执行js程序:excut_script('jsCode')

    5. 前进、后退:back()、forward()

    6. 关闭浏览器:quit()

  2. selenium处理iframe

    • 如果定位的标签存在于selenium标签中,则必须使用switch_to.frame(id)

    • 动作链(拖动):

      1. from selenium.webdriver import ActionChains

      2. 实例化一个动作链对象:action = ActionChains(bro)

      3. clink_and_hold(div):点击且长按操作

      4. move_by_offset(x,y)

      5. perform():让动作链立即执行

      6. action.release():释放动作链对象

示例(注释的都是精华)

示例一:淘宝-搜索-滚屏

from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path='chromedriver')
bro.get('https://www.taobao.com/')
​
search_input = bro.find_element('id', 'q')
#标签定位
​
search_input.send_keys('Iphone')
#标签交互
sleep(2)
​
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#执行一组js程序
#该程序需要在console中写一串代码:window.scrollTo(0,document.body.scrollHeight)
sleep(2)
​
btn = bro.find_elements('xpath', '//*[@id="J_TSearchForm"]/div[1]/button')[0]
btn.click()
#点击搜索按钮
​
bro.get('https://www.baidu.com')
​
sleep(2)
bro.back()
#回退
​
sleep(2)
bro.forward()
#前进
​
sleep(2)
bro.quit()

示例二:动作链(拖动)-frame

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path='chromedriver')
bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
​
bro.switch_to.frame('iframeResult')#括号内是frame的id
#如果定位的标签位于frame标签中,则必须通过上述操作进行标签定位
​
div = bro.find_element('id', 'draggable')
​
action = ActionChains(bro)
#动作链
​
action.click_and_hold(div)
#点击长按指定标签
​
for i in range(5):
    action.move_by_offset(17, 0).perform()
    #perform()立即执行动作链操作
    #move_by_offset(x, y)x:水平方向移动距离,y:竖直方向移动距离
​
    sleep(1)
​
action.release()
#释放动作链
​
bro.quit()

示例三:模拟登录QQ空间

from selenium import webdriver
from time import sleep
bro = webdriver.Chrome('chromedriver')
bro.get('https://qzone.qq.com/')
bro.switch_to.frame('login_frame')
a_tag = bro.find_element('id', 'switcher_plogin')
a_tag.click()
​
userName_tag = bro.find_element('id', 'u')
passWord_tag = bro.find_element('id', 'p')
sleep(2)
userName_tag.send_keys('2805487978')
sleep(1)
passWord_tag.send_keys('******')
sleep(1)
btn = bro.find_element('id', 'login_button')
btn.click()
sleep(2)
​
bro.quit()

示例四:无头浏览器+反检测

from selenium import webdriver
from time import sleep
​
#实现规避检测/实现无可视化页面
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('headless')
​
#添加:options=options
bro = webdriver.Chrome(executable_path='chromedriver', options=options)
​
bro.get('https://www.baidu.com')
​
bro.quit()

示例五:古诗文网模拟登录

流程:

  1. 使用selenium打开登录页面

  2. 对当前selenium打开的这张页面进行截图

  3. 对当前图片的局部区域(验证码图片)进行裁剪

    • 好处:将验证码图片和模拟登录一一对应

  4. 使用超级鹰识别验证码图片(坐标)

from selenium import webdriver
from time import sleep
from PIL import Image
from 超级鹰 import Chaojiying_Client
​
bro = webdriver.Chrome(executable_path='chromedriver')
bro.get('https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx')
sleep(1)
​
bro.maximize_window()
#浏览器最大化显示
​
bro.save_screenshot('aa.png')
#save_screenshot()将当前整张页面截取并保存
​
#确定验证码图片对应的左上角和右下角的坐标(裁剪的区域就确定了)
code_img_ele = bro.find_element('xpath', '//*[@id="imgCode"]')
​
location = code_img_ele.location
#验证码图片左上角的坐标:x,y
​
size = code_img_ele.size
#验证码图片对应的宽和高
​
rangle = (
    location['x']*1.25, location['y']*1.25, (location['x']+size['width'])*1.25, (location['y']+size['height'])*1.25
)
i = Image.open('./aa.png')
frame = i.crop(rangle)
frame.save('./a.png')
​
​
chaojiying = Chaojiying_Client('超级鹰账号', '超级鹰密码', '925926')  #用户中心>>软件ID 生成一个替换 96001
im = open('a.png', 'rb').read()                                                 #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 1902)['pic_str'])
yan = chaojiying.PostPic(im, 1902)['pic_str']
bro.find_element('id', 'email').send_keys('账号')
bro.find_element('id', 'pwd').send_keys('密码')
bro.find_element('id', 'code').send_keys(yan)
bro.find_element('id', 'denglu').click()
sleep(2)
bro.quit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值