1、获取ajax数据的方式

  1. 直接分析ajax调⽤的接⼝。然后通过代码请求这个接口。
  2. 使⽤Selenium+chromedriver模拟浏览器行为获取数据。
方式优点缺点
分析接口直接可以请求到数据。不需要做⼀些解析⼯作。代码量少,性能高分析接⼝⽐较复杂,特别是⼀些通过js混淆的接⼝,要有⼀定的js功底。容易被发现是爬虫。
selenium直接模拟浏览器的行为。浏览器能请求到的,使⽤selenium也能请求到。爬⾍更稳定。代码量多。性能低。

2、Selenium+chromedriver获取动态数据

selenium是⼀个web的⾃动化测试⼯具,最初是为⽹站⾃动化测试⽽开发的,selenium可以直接运⾏在浏览器上,它⽀持所有主流的浏览器,可以接收指令,让浏览器⾃动加载⻚⾯,获取需要的数据,甚⾄⻚⾯截屏。
chromedriver是⼀个驱动Chrome浏览器的驱动程序,使⽤他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。

3、下载chromedrive

ChromeDriver 镜像: https://npmmirror.com/mirrors/chromedriver/

1、安装Selenium和chromedriver

  1. 安装Selenium:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

2.安装chromedriver:
下载完成后,将chromedriver.exe放在谷歌浏览器安装目录下和python.exe的目录下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ahSkjOuP-1681285156618)(en-resource://database/5127:1)]

4、Selenium案例

 from selenium import webdriver
 # 实例化浏览器
 driver = webdriver.Chrome()
 # 发送请求
 driver.get('https://www.baidu.com')
 # 退出浏览器
 driver.quit()  

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
if __name__ == '__main__':
    driver = webdriver.Firefox()
    driver.set_window_position(x=50,y=60)
    driver.set_window_size(width=1366, height=700)
    driver.get("http://www.python.org")
    print driver.title
    driver.close()
  1. 首先实例化一个Chrome WebDriver对象。
  2. 之后,driver.set_window_position方法来设置浏览器窗口的起始位置(就是浏览器左上角的坐标位置)
  3. driver.set_window_size用来设置浏览器窗口的大小。
  4. 重点的dirver.get()方法,用来导航到给定的url地址的网页。WebDriver 将会等待直到页面全部加载完成后才会把控制权返回给脚本。
  5. 最终,浏览器窗口关闭。当然,你也可以调用driver.quit()方法来结束浏览器调用,两个方法的不同之处在于,close()方法是关闭当期的浏览器窗口,而quit()方法是退出整个浏览器。

5、定位元素

1、find_element_by_id:根据id来查找某个元素。

 submitTag = driver.find_element_by_id('su')
 submitTag1 = driver.find_element(By.ID,'su')

2、find_element_by_class_name:根据类名查找元素。

 submitTag = driver.find_element_by_class_name('su')
 submitTag1 = driver.find_element(By.CLASS_NAME,'su')

3、find_element_by_name:根据name属性的值来查找元素。

 submitTag = driver.find_element_by_name('email')
 submitTag1 = driver.find_element(By.NAME,'email')

4、find_element_by_tag_name:根据标签名来查找元素。

submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')

5、find_element_by_xpath:根据xpath语法来获取元素。

submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')

6、find_element_by_css_selector:根据css选择器选择元素。

submitTag = driver.find_element_by_css_selector('//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')

要注意,find_element是获取第⼀个满⾜条件的元素。find_elements是获取所有满⾜条件的元素。

6、操作表单元素

操作输⼊框:分为两步。
第⼀步:找到这个元素。
第⼆步:使⽤send_keys(value),将数据填充进去。

 inputTag = driver.find_element_by_id('kw')
 inputTag.send_keys('python')

使⽤clear⽅法可以清除输⼊框中的内容。

inputTag.clear()

操作checkbox:因为要选中checkbox标签,在⽹⻚中是通过⿏标点击的。因此想要选中checkbox标签,那么先选中这个标签,然后执⾏click事件。

rememberTag = driver.find_element_by_name("rememberMe")
rememberTag.click()

操作按钮:操作按钮有很多种⽅式。⽐如单击、右击、双击等。这⾥讲⼀个最常⽤的。就是点击。直接调⽤click函数就可以了。

 inputTag = driver.find_element_by_id('su')
 inputTag.click()

选择select:select元素不能直接点击。因为点击后还需要选中元素。这时候selenium就专⻔为select标签提供了⼀个类.
selenium.webdriver.support.ui.Select。将获取到的元素当成参数传到这个类中,创建这个对象。以后就可以使⽤这个对象进⾏选择了。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐