driver 操作页面的基本方法 定位网页元素
常见的定位元素、id、class、css、xpath使用方法如下:find_element_by_name
find_element_by_xpath
find_elemrnt_by_link_text
find_element_by_css_selector
其中xpath、selector等可以通过审查元素,对相关选项点击鼠标右键copy得到
导入selenium相关库
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
打开www.baidu.comw网页
driver = webdriver.Firefox()
driver.get("http://www.baidu.com/")
在百度搜索框输入python
driver.find_element_by_id("kw").send_keys("python")
time.sleep(5)
点击百度一下
driver.find_element_by_id("su").click()
time.sleep(5)
退出
driver.quit()
页面等待
time.sleep()这是非常重要的一部分
例如在爬取使用ajax、js等方法编写的网页就不能确定我们定位的元素是否已经加载出来了。当元素未加载出来时,我们就去调用当然会时常遇到报错的情况。
在处理这些界面读取时常采用以下两种方法。
方法一 time.sleep() 不推荐,固定等待时间不能确定是否足够页面加载完成
方法二 显示等待 指满足某一条件之后再执行后面的代码 可以设置最长的等待时间
from selenium.webdriver.common.by import By
WebDeriverWait 库负责循环等待
from selenium.webdriver.support.ui import WebDriverWait
ecpected_conditions类 负责条件
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://image.baidu.com/")
try:
#driver打开的页面会一直循环 直到id=kw 出现,可以设置最长等待时间
#格式是WebDriverWait(driver,time).until(EC.条件(By.属性,"属性名字"))
#element_to_be_clickable 判断当前元素是否可以点击
element = WebDriverWait(driver,10).until(
EC.presence_of_all_elements_located(By.ID,"kw") #presence_of_all_elements_located判断页面元素是否已经加载出来
)
finally:
#运行结束要释放内存
driver.quit()
关于css 定位
id属性、class、标签定位他们还能组合在一起使用
以百度首页为例
#表示id属性 .表示class属性 标签直接使用
driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector("input")
组合形式
driver.find_element_by_css_selector("input.s_ipt")
driver.find_element_by_css_selector("inpot[ad="sss"]")
层级关系 这里是input下的span下的a元素
driver.find_element_by_css_selector("inpot > span >a")