Selenium爬虫语法总结
供个人学习需要进行整理
了解网页的元素和属性
- 使用F12打开网页源代码
- 讲解部分属性
- 非自定义属性
- id
- class
- div
- 等等
- 自定义属性
- 开发者自己定义的属性
- 非自定义属性
加载浏览器
- 导入包
- from selenium import webdriver
- from selenium.webdriver.common.by import By(选择选择元素的方式)
- 加载浏览器驱动
- web = webdriver.Chrome(r'chromedriver.exe')
- WebDriver 对象,指明了浏览器驱动的地址
- web是返回值,对象实例化
- web = webdriver.Chrome(r'chromedriver.exe')
- 获取网页
- web.get('https://www.baidu.com')
设置最大等待时间
- web.implicitly_wait(10)
关闭浏览器
- web.quit()
根据id 属性选择元素
- element = web.find_element(By.ID, str)
- 最新4.0更新后的方法(推荐使用)
- key=web.find_element_by_id(str)
- 能用,但是会预警
- 元素操作
- element.send_keys(str)
根据class属性、tag名选择元素
- 根据class属性选择元素
- elements = web.find_elements(By.CLASS_NAME, str)
- 返回的是标签对象即WebElement对象
- 取出列表中的每个 WebElement对象,打印出其text属性的值
- element.text
- 根据 tag 名 选择元素,如div等标签
- elements = web.find_elements(By.TAG_NAME, str)
- 其余方法一致
- find_element 和 find_elements 的区别
- 前者选择单个,后者选择多个
控制元素
- 点击元素
- element.click()
- 输入框
- 清除输入框已有的字符串:element.clear()
- 输入新字符串:element.send_keys(str)
- 补充:
- element.get_attribute('innerText')
- element.get_attribute('textContent')
- 获取元素信息
- 获取元素的文本内容
- element.text
- 获取元素属性
- element.get_attribute('class')
- 获取整个元素对应的HTML
- element.get_attribute('outerHTML')获取外部
- element.get_attribute('innerHTML')获取内部
- 获取输入框里面的文字
- element.get_attribute('value')
- 获取元素的文本内容
利用CSS表达式选择元素
- web.find_element(By.CSS_SELECTOR, CSS Selector参数)
- 选择元素
- id使用#+id值表示
- class使用.+class值表示
- 属性选择使用 [属性名字] [href="http://www.baidu.com"]
- 选择属性值包含某个字符串的元素
- a[href*="baidu"]
- 选择属性值以某个字符串开头的元素
- a[href^="http"]
- 选择属性值以某个字符串结尾的元素
- a[href$="gov.cn"]
- 选择的同时具有多个属性的元素要
- div[class="result c-container new-pmd"][id="1"]
- 选择属性值包含某个字符串的元素
- 其他值可以直接填写
- 选择子元素和后代子元素
- 直接子元素
- 元素1 > 元素2
- 元素1 > 元素2 > 元素3
- 后代子元素
- 元素1 元素2
- 元素1 元素2 元素3
- 选择语法联合使用进行选择
- div.foot > span.copy
- .foot > .copy
- .foot .copy
- 直接子元素
- 组选择
- .a , .b
- id为1里面的span和p元素?
- #1 > span , p
- #1 > span , #1 > p
- 按次序选择子节点
- 父元素的第n个子节点
- nth-child
- span:nth-child(2)
- #t1 :nth-child(2)
- http://cdn1.python3.vip/files/selenium/sample1b.html
- 父元素的倒数第n个子节点
- nth-last-child
- p:nth-last-child(1)
- #t1 span:nth-last-child(2)
- #t1 :nth-last-child(2)
- 父元素的第几个某类型的子节点
- nth-of-type
- span:nth-of-type(1)
- div#t1 span:nth-of-type(1)
- 父元素的倒数第几个某类型的子节点
- nth-last-of-type
- p:nth-last-of-type(2)
- div p:nth-last-of-type(2)
- 奇数节点和偶数节点
- p:nth-child(even)偶数
- p:nth-child(odd)奇数
- 父元素的第n个子节点
- 兄弟节点选择
- 相邻兄弟节点选择
- 使用 “+”
- h3 后面紧跟着的兄弟节点 span
- h3 + span
- 后续所有兄弟节点选择
- 使用 “~”
- h3 后面所有的兄弟节点 span
- h3 ~ span
- 相邻兄弟节点选择