首页 > 其他 > 详细

selenium使用

时间:2019-07-13 14:20:50      阅读:116      评论:0      收藏:0      [点我收藏+]

安装driver

  • chromdriver 需要对应chrome版本

  • 提示权限不足,sudo chmod +x phantomjs

  • chromdriver --version

  • phantomjs --version

定位元素的方法

  • driver.find_element #返回第一个元素,如果没有报错

  • driver.find_elements #返回包含元素的列表,如果没有返回空列表

获取属性和文本的方法

  • 获取文本:element.text

  • 获取属性值:element.get_attribute("href")

切换frame

  • driver.switch_to.frame(id,name,element)

验证码的识别

  • url地址不变,验证码不变

    • 请求验证码的地址,获取响应,进行识别

  • url地址不变,验证码变化

    • 请求验证码,发送登录请求,需要带上统一套cookie,才能够都能路成功,对应可以使用requests.Session()来实现

  • selenium处理验证码

    • 带上selenium的driver中的cookie来请求验证码

    • selenium截屏,获取验证

      import time
      
      from selenium import webdriver
      
      
      class DouYu(object):
          def __init__(self):
              # 初始化url, 驱动实例
              self.start_url = "https://www.douyu.com/directory/all"
              self.driver = webdriver.Chrome()
      
          def parse_url(self, url):
              self.driver.get(url)
              time.sleep(5)
              self.driver.find_element_by_link_text("颜值").click()
              time.sleep(2)
      
          def extract_data_list(self):
              li_list = self.driver.find_elements_by_xpath(
                  //div[@class="layout-Module-container layout-Cover ListContent"]/ul/li
              )
              content_list = []
      
              for li in li_list:
                  item = {}
                  item[title] = li.find_element_by_xpath(.//h3).text
                  item[anchor] = li.find_element_by_xpath(.//h2).text
                  item[watch_num] = li.find_element_by_xpath(.//span[@class="DyListCover-hot"]).text
                  item[link] = li.find_element_by_xpath(./div/a[1]).get_attribute(href)
                  content_list.append(item)
      
              next_url = self.driver.find_elements_by_xpath(//li[@title="下一页"][@aria-disabled="false"])
              next_url = next_url[0] if next_url else None
              return content_list, next_url
      
          def save_data(self, data):
              with open(./douyu.txt, ab+) as f:
                  for v in data:
                      tmp = str(v) + "\n"
                      f.write(tmp.encode(utf-8))
      
          def run(self):
              self.driver.maximize_window()
              # 获取html
              self.parse_url(self.start_url)
              # 提取数据
              content_list, next_url = self.extract_data_list()
              # 保存
              self.save_data(content_list)
      
              # 判断下一页元素是否存在
              while next_url:
                  print(next_url)
                  next_url.click()
                  time.sleep(2)
                  content_list, next_url = self.extract_data_list()
                  self.save_data(content_list)
      
      
      if __name__ == __main__:
          douyu = DouYu()
          douyu.run()

       

selenium使用

原文:https://www.cnblogs.com/itelephant/p/11180313.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!