吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5557|回复: 1
上一主题 下一主题
收起左侧

[会员申请] 申请会员ID :Secretzp

[复制链接]
跳转到指定楼层
楼主
吾爱游客  发表于 2019-7-10 17:00 回帖奖励 |自己
1. 申请 ID:Secretzp2. 个人邮箱:1261589243@qq.com  3. 个人技术博客: www.zhoupeng.ml主要使用语言:python,易语言,C爬虫:selenium & phantomJS 无界神器
目录清单
  • selenium和phantomjs概述
  • selenium常用API
  • 案例操作:模拟登陆csdn



  • 准备工作:selenium和PhantomJS
    phantomjs:一个独立的无界面浏览器,并不是python模块,所以需要单独下载安装;phantomjs官方网站:http://phantomjs.org/
    selenium:独立的第三方模块,通过pip install selenium进行安装


  • selenium核心API

    • selenium.webdriver
      • selenium核心驱动模块,主要包含了web服务相关的核心操作,可以调用指定的服务器
        • 如:driver = selenium.webdriver.PhantomJS()
        • 如:driver = selenium.webdriver.Chrome()
      • 接续:浏览器填写url地址访问文章:
        • driver.get("http://www.baidu.com")
      • 接续:获取标签对象

        • find_element_by_id()
          • 根据标签编号查询标签对象
          • <div id="box">...</div>
          • driver.find_by_element_by_id("box")
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_element(by=By.ID, value='box')

        • find_elements_by_name()
          • 根据标签的name属性只查询标签对象
          • <div name="real_name"></div>
          • driver.find_elements_by_name("real_name")
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_elemnets(by=By.NAME, value='real_name')

        • find_elemnets_by_xpath()
          • 根据xpath语法查询指定的标签
          • driver.find_elements_by_xpath('//input[id="kw"]')
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_elements(by=By.XPATH, value='//input[@id="kw"]')

        • find_elements_by_link_text()
          • 根据超链接标签链接文本查询标签
          • driver.find_elements_by_link_text('damu')
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_elements(by=By.LINK_TEXT, value='damu')

        • find_elemetns_by_partial_link_text()
          • 根据超链接标签链接文本 扩展 查询标签
          • driver.find_elements_by_partial_link_text('damu')
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_elements(by=By.PARTIAL_LINK_TEXT, value='damu')

        • find_elements_by_tag_name()
          • 根据标签名称查询标签
          • driver.find_elements_by_tag_text('damu')
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_elements(by=By.TAG_NAME, value='damu')

        • find_elements_by_class_name()
          • 根据标签的class名称查询标签
          • driver.find_elements_by_class_name("")
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_elements(by=By.CLASS_NAME)

        • find_elements_by_css_selector()
          • 根据标签的样式名称查询得到标签
          • driver.find_elements_by_css_selector("#box > div")
          • 同下:
          • from selenium.webdriver.common.by import By
          • driver.find_elements(by=By.CSS_SELECT, value='#box')

    • selenium.webdirver.common.keys.Keys
      • selenium用于操作用户键盘的核心模块
      • 表单处理:输入框填写数据
        • 选择输入框:kw = driver.find_element_by_id("kw")
        • 输入数据:kw.send_keys(u"关键字")
      • 表单处理:下拉列表框选择数据
        • from selenium.webdriver.support.ui import Select
        • 选择下拉框:sl = Select(driver.find_element_by_id("city"))
        • 输入选择的值:
          • sl.select_by_index(1) # 根据值的索引赋值
          • sl.select_by_value("zhengzhou") # 根据具体下拉框的value赋值
          • sl.select_by_visible_text("郑州")# 根据下拉框显示的值赋值
          • sl.deselect_all() # 全部取消
      • 键盘按键:功能键+字母按键
        • from selenium.webdriver.common.keys import Keys
        • driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "a")# ctrl+a全选
          • ALT:alt按键
          • NUMBER1:数字键1
          • LFET:←左方向键
          • F1:功能键F1
          • 更多more~

    • selenium.webdriver.ActionChains
      • 该模块包含了和鼠标操作相关的行为
      • 模拟鼠标单击
        • driver.find_element_by_id("su").click()
      • 鼠标链操作
        • from selenium.webdriver import ActionChains # 引入鼠标模块
        • su = driver.find_element_by_id("su") # 获取标签对象
        • ActionChains(driver).move_to_element(su).perform()# 鼠标移动到对象上
        • ActionChains(driver).move_to_element(su).click(su).perform()# 鼠标单击
        • ActionChains(driver).move_to_element(su).double_click(su).perform()# 鼠标双击
        • ActionChains(driver).move_to_element(su).context_click(su).perform()# 鼠标右键单击
        • ActionChains(driver).move_to_element(su).click_to_hold(su).perform()# 鼠标单击并按住
        • pos1 = driver.find_element_by_element("pos1")
        • pos2 = driver.find_element_by_element("pos2")
        • ActionChains(driver).drag_and_drop(pos1, pos2).perform() # 鼠标将pos1脱拽到pos2的位置

    • 页面窗口操作
      • driver.switch_to.window("window name")# 窗口诶切换
      • driver.forward()# 导航前进
      • driver.back()# 导航后退

    • cookie操作
      • driver.get_cookies()获取当前正在访问url地址的所有cookies数据
      • driver.delete_cookie(key)根据key值删除对应的cookie数据
      • driver.delete_all_cookies()清空cookie

    • 网页延时:针对网页中通过Ajax异步加载Json数据的情况,不同的网速下返回Json数据并渲染页面会有延迟,网页中并不一定能正常获取数据,需要延时操作
      • 显式等待
      # coding:utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdirver.support import except_conditions as ECdriver = webdriver.PhantomJS()driver.get("http://www.baidu.com")try:    # 获取标签:间隔10S获取标签~一直等待到标签获取成功    element = WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.ID, "box"))    )finally:    driver.quit()
      这里的等待条件,就是except_conditions调用时执行的函数,内置如下条件可以直接调用title_istitle_containspresence_of_element_locatedvisibility_of_element_locatedvisibility_ofpresence_of_all_elements_locatedtext_to_be_present_in_elementtext_to_be_present_in_element_valueframe_to_be_available_and_switch_to_itinvisibility_of_element_locatedelement_to_be_clickable – it is Displayed and Enabled.staleness_ofelement_to_be_selectedelement_located_to_be_selectedelement_selection_state_to_beelement_located_selection_state_to_bealert_is_present
      • 隐时等待:设置一个等待时间即可
      # coding:utf-8from selenium import webdriver driver = webdriver.PhantomJS()driver.implicitly_wait(10)driver.get("http://www.baidu.com")driver.find_element_by_id("su")

    以上,是selenium核心的几个API操作方式案例:CSDN登录
    真实用户登录CSDN场景:
    • 用户打开浏览器,访问并打开csdn登录网页
    • 填写账号、密码,点击登录
    • 进入CSDN主页

    selenium配合phantomjs完成登录操作,并保存数据到文件中# coding:utf-8from selenium import webdriverdriver = webdriver.PhantomJS("./phantomjs-2.1.1/bin/phantomjs")# 访问登录页面driver.get("https://passport.csdn.net/account/login?ref=toolbar")# 保存登录页面截图driver.save_screenshot("csdn1.png")# 获取登录 用户输入框、密码输入框u_name = driver.find_element_by_id("username").send_keys("damumoye")p_word = driver.find_element_by_id("password").send_keys("********")# 模拟点击登录login_btn = driver.find_element_by_css_selector("#fm1 .logging")login_btn.click()# 保存登录后的截图driver.save_screenshot("csdn2.png")# 保存数据with open("csdn.html", "w") as f:    f.write(driver.page_source.encode("utf-8"))# 退出浏览器driver.quit()

5988045-755e0a4b7e806ca3.png (64.37 KB, 下载次数: 0)

5988045-755e0a4b7e806ca3.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Hmily 发表于 2019-7-11 11:08
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。

21号自己来注册吧。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 05:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表