Selenium

为了Selenium方法的成功使用,必须保证ChromeDriver安装版本与Chrome版本匹配。当然你也可以使用其它浏览器,个人选择。

这是ChromeDriver的镜像下载地址,更新浏览器后记得更新ChromeDriver,顺便我个人记录一下,我的ChromeDriver装在C:\Program Files (x86)\Google\Chrome\Application

注意:

1、上文中的镜像已停止更新,现在只能从ChromeDriver官方站点进行下载

2、此外ChromeDriver不仅要放到\Chrome\Application下,还有可能需要放到python路径下:D:\Program Files\Anaconda3

主要流程讲解

1、控制开启浏览器

from selenium.webdriver import Chrome, ChromeOptions # 导入类库
option = ChromeOptions() # 初始化类
option.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging']) # 添加参数
driver = Chrome(options=option)  # 模拟开浏览器
driver.get('https://m.xiaozhu.com/#') # 跳转网址
myDriver.maximize_window()  # 最大化窗口
driver.title  # 如果成功打印title则说明接管成功

2、获取对应元素

driver.find_elements_by_class_name('list_con') # 通过class的方式获取,也可以使用其他方式
find_elements(By.XPATH,"//*[contains(@href, 'pdf')]").get_attribute('href')

selenium更新后,之前的获取元素的方式发生了改变,主要差异为引入了By,其他的参数直接点开By查看即可

from selenium.webdriver.common.by import By
driver.find_elements(By.CLASS_NAME, 'list_con')

同样可以使用Xpath获取元素,语法为//节点名[starts-with(@元素名, "相同部分")]

//div[starts-with(@id,'ma')]  # 选取id值以ma开头的div节点
//div[contains(@id,'ma')]  # 选取id值含有ma的div节点
//div[contains(@id,'ma') and contains(@id,'in')]  # 选取id值包含ma和in的div
//div[contians(text(),'ma')]  # 选取节点文本包含ma的div节点

3、处理元素数据

我习惯于使用BeatifulSoup处理,当然也可以使用selenium套件处理,等有空我再学习一下补上

idList = driver.find_elements_by_class_name('list_con')
soup = BeautifulSoup(idList[0].get_attribute('outerHTML')) # 转换为soup对象
divs = soup.find_all('div', "list clearfix carnival_item") # 找到对象中数据列表
element.click() # 点击元素

4、设置等待

from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(myDriver, 10).until(lambda driver: driver.find_element(By.CLASS_NAME, 'bicon.bar-icon-fp'))

5、托管指定端口的浏览器

对于知乎这种网站,使用selenium控制开启一个浏览器往往会被识别,所以需要我们配置一个浏览器(进行登录等常规操作)后,再使用代码直接托管,具体流程如下:

  • 将Chrome发送到桌面快捷方式,并设置其端口和缓存文件路径

    目标处填入“程序路径 端口设置 文件路径”,具体如下

    "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="D:\Euclid_Jie"
  • 使用Python接管浏览器

    from selenium import webdriver
    options = webdriver.ChromeOptions()
    options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")  # 接管
    driver = webdriver.Chrome(options=options)  # 设置参数
    driver.get(Url)  # 跳转网页

最后更新于