zoukankan      html  css  js  c++  java
  • 《手牵手带你走进python世界》系列三

    day03

    • selenium 介绍

      Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),[Mozilla Firefox](https://baike.baidu.com/item/Mozilla Firefox/3504923),Safari,Google Chrome,Opera等。

    • 驱动对应表

      chromedriver版本 支持的Chrome版本
      v2.46 v71-73
      v2.45 v70-72
      v2.44 v69-71
      v2.43 v69-71
      v2.42 v68-70
      v2.41 v67-69
      v2.40 v66-68
      v2.39 v66-68
      v2.38 v65-67
      v2.37 v64-66
      v2.36 v63-65
      v2.35 v62-64
      v2.34 v61-63
      v2.33 v60-62
      v2.32 v59-61
      v2.31 v58-60
      v2.30 v58-60
      v2.29 v56-58
      v2.28 v55-57
      v2.27 v54-56
      v2.26 v53-55
      v2.25 v53-55
      v2.24 v52-54
      v2.23 v51-53
      v2.22 v49-52
      v2.21 v46-50
      v2.20 v43-48
      v2.19 v43-47
      v2.18 v43-46
      v2.17 v42-43
      v2.13 v42-45
      v2.15 v40-43
      v2.14 v39-42
      v2.13 v38-41
      v2.12 v36-40
      v2.11 v36-40
      v2.10 v33-36
      v2.9 v31-34
      v2.8 v30-33
      v2.7 v30-33
      v2.6 v29-32
      v2.5 v29-32
      v2.4 v29-32
    • 安装谷歌驱动 找到对应的版本

    • 元素定位

      元素名称 webdriver-api
      id find_element_by_id()
      name find_element_by_name()
      class name find_element_by_class_name()
      tag name find_element_by_tag_name()
      link text find_element_by_link_text()
      partial link text find_element_by_partial_link_text()
      xpath find_element_by_xpath()
      css selector find_element_by_css_selector()
    • 元素操作方式

      方法 说明
      clear 清除标签内容
      send_keys 模拟按键输入
      click 点击
      submit 提交表单
      back 向后
      forward 向前
      maximize_window 全屏
    • 开胃菜

      # 百度搜索老男孩
      from selenium import webdriver
      # 打开浏览器
      b = webdriver.Chrome()
      # 请求百度
      b.get('https://www.baidu.com')
      # 找到百度的input输入框的标识符 id:kw
      ele = b.find_element_by_id('kw')
      # 清除输入框信息
      ele.clear()
      # 输入 老男孩 
      ele.send_keys('老男孩')
      # 查找点击按钮节点
      su = b.find_element_by_id('su')
      # 点击按钮
      su.click()
      
      
    • 爬取京东商城

      from selenium import webdriver
      from selenium.webdriver.common.keys import Keys  # 键盘按键操作
      import time
      
      def get_goods(driver):
          try:
              goods = driver.find_elements_by_class_name('gl-item')
      
              for good in goods:
                  detail_url = good.find_element_by_tag_name('a').get_attribute('href')
      
                  p_name = good.find_element_by_css_selector('.p-name em').text.replace('
      ','')
                  price = good.find_element_by_css_selector('.p-price i').text
                  p_commit = good.find_element_by_css_selector('.p-commit a').text
                  msg = '''
                  商品 : %s
                  链接 : %s
                  价钱 :%s
                  评论 :%s
                  ''' % (p_name, detail_url, price, p_commit)
      
                  print(msg, end='
      
      ')
      
              button = driver.find_element_by_partial_link_text('下一页')
              button.click()
              time.sleep(1)
              get_goods(driver)
          except Exception:
              pass
      
      
      def spider(url, keyword):
          driver = webdriver.Chrome()
          driver.get(url)
          driver.implicitly_wait(3)  # 使用隐式等待
          try:
              input_tag = driver.find_element_by_id('key')
              input_tag.send_keys(keyword)
              input_tag.send_keys(Keys.ENTER)
              get_goods(driver)
          finally:
              driver.close()
      
      
      if __name__ == '__main__':
          spider('https://www.jd.com/', keyword='华为P30')
      
    • 爬取QQ空间动态

      import time
      from selenium import webdriver
      from selenium.webdriver.common.keys import Keys
      
      driver = webdriver.Chrome()
      
      driver.get('https://i.qq.com/')
      driver.switch_to.frame('login_frame')
      driver.find_element_by_id("switcher_plogin").click()
      user = driver.find_element_by_id('u')
      user.send_keys('')  # QQ号
      pwd = driver.find_element_by_id('p')
      pwd.send_keys('xxxxxxx') # 密码
      submit = driver.find_element_by_id('login_button')
      submit.click()
      time.sleep(2)
      
      for i in range(50):
          driver.execute_script("window.scrollTo(0,500)")
          time.sleep(5)
      
      li_list = driver.find_elements_by_class_name("f-single")
      print(len(li_list))
      
      for li in li_list:
          print(li.text)
          print('*' * 60)
      
  • 相关阅读:
    LeetCode: Tags-[Array], Difficulty-[Medium]
    J2SE 常用方法
    LeetCode: Tags-[Array], Difficulty-[Easy]
    Java Code Style 记录
    LintCode 1-30;
    Android在线程中发送GET和POST请求 在主线程更新UI
    Android中intent启动Activity中intent.setFlags()的作用
    源码备份 listview
    android数据库操作
    android 验证二
  • 原文地址:https://www.cnblogs.com/wuxiaoshi/p/11048721.html
Copyright © 2011-2022 走看看