Selenium 简介


简单实例:
from selenium import webdriver
from scrapy.selector import Selector

browser = webdriver.Chrome(executable_path='E:/Template/chromedriver.exe')

browser.get('https://www.zhihu.com/signin?next=%2F')

# 若 css 某种写法无法找到元素,则换一种写法
browser.find_element_by_css_selector('.SignFlow-tabs div:nth-child(2)').click()  # 找到密码登录按钮,并进行点击
browser.find_element_by_css_selector('.SignFlow-account input[name="username"]').send_keys('17688718015')  # 找到账号输入框,并输入密码
browser.find_element_by_css_selector('.SignFlow-password input[name="password"]').send_keys('tanling.')  # 找到密码输入框,并输入密码

browser.find_element_by_css_selector('form[class="SignFlow Login-content"] button[type="submit"]').click()  # 找人登录按钮,并进行点击

登录失败:

因为服务器识别到了 Driver 客户端

服务器返回:error: {code: 10001, message: “10001:请求参数异常,请升级客户端后重试”}

解决办法:
  • 下载 Chrome 60 版本,Driver 2.33 版本 不推荐
  • 手动启动 ChromeDriver 调试模式 推荐

不是因为 header 中的参数,而是 chromedriver 中有一些 js 变量

变量中包含 chromedriver 的关键词。

    1. 启动 chrome
      2. CMD 进入  chrome.exe 目录下
        3. 指定端口,启动调试端口,输入命令:chrome.exe --remote-debugging-port=9222
          4. 访问:127.0.0.1:9222/json  确保chromedriver 实例已关闭完毕

避免追加输入信息
# 调用按键代码集类,中CONTROL的值,加上 a 键,进行全选输入栏信息,进行覆盖
# 传入键值元素参数至 send_keys 方法中
browser.find_element_by_css_selector('').send_keys(Keys.CONTROL + 'a')
browser.find_element_by_css_selector('').send_keys('17688718015')

mouse(鼠标模拟点击库)
  1. 避免 selenium 中 click 方法偶尔失效
  2. 使用 pip 进行安装
  3. 引入 mouse 库中 move,click 方法
  4. 传入x,y 轴参数,在调用 click 方法点击
from mouse ifrom mouse import move, clickmport move, click
time.sleep(3)
move(950, 675)
click()

  • COOKIES_ENABLED(启用 cookie)

    从上个 Request 返回数据中 获取 Cookie 自动在下个 Request 中*携带***

    COOKIES_ENABLED = True
  • USER_AGENT(用户代理

    后续所有请求,都会携带这个 header 参数

    USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
  • DOWNLOADER_MIDDLEWARES(下载器中间件
    DOWNLOADER_MIDDLEWARES = {
    
    #   'ArticleSpider.middlewares.ArticlespiderDownloaderMiddleware': 543,
    
        'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 2
    
    }

Chrome旧版本,WebDriver 启动 Chrome 失败
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary

Selenium环境搭建的问题引起最多的是No browser is open,这种报错导致浏览器无法打开;问题的原因主要是2点

1.浏览器安装默认路径

2.浏览器匹配的驱动没有放在正确的环境变量目录位置(可以代码指定驱动路径)

3.浏览器版本与对应的驱动版本匹配

解决办法:

from selenium import webdriver
options = webdriver.ChromeOptions()            # 实例化 ChromeOptions 类
options.binary_location = "chrome.exe PATH"  # 传入 chrome.exe 文件路径
browser = webdriver.Chrome(chrome_options=options)    # 传入实例化对象 -> 关键字参数 chrome_options

Author: Ming Hui
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Ming Hui !
 Previous
Selenium 模拟微博登录 Selenium 模拟微博登录
启用 ChromeDriverdef start_requests(self): """使用 selenium 获取 cookie""" # 获得 Options(操作)对象 chrome_option = Opti
2020-08-09
Next 
Selenium 基本使用 Selenium 基本使用
Selenium简介​ 自动化测试框架,最开始是用来做Web自动化测试的,测试网站系统开发。 Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE
2020-08-09