17.1 动态HTML技术
17.2 Selenium和PhantomJS入门
17.2.1 Selenium
- Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开 发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器 (包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏
17.2.2 PhantomJS
- PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把 网站加载到内存并执行页面上的JavaScript
- http://selenium-python-zh.readthedocs.io/en/latest/waits.html
17.2.3 加载网页
- from selenium import webdriver
- driver =webdriver.PhantomJS(“c:…/pantomjs.exe”)
- driver.get(“http://www.baidu.com/”)
- driver.save_screenshot(“长城.png”)
17.2.4 定位和操作
- driver.find_element_by_id(“kw”).send_keys(“长城”)
- driver.find_element_by_id(“su”).click()
17.2.5 查看请求信息
- driver.page_source
- driver.get_cookies()
- driver.current_url
17.2.6 退出
- driver.close() #退出当前页面
- driver.quit() #退出浏览器
17.3 页面元素定位
17.3.1 用法
- find_element_by_id (返回一个)
- find_elements_by_xpath (返回一个列表)
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
17.3.2 注意点
- find_element 和find_elements的区别:返回一个和返回一个列表
- by_link_text和by_partial_link_text的区别:全部文本和包含某个文本
- by_css_selector的用法: #food span.dairy.aged
- by_xpath中获取属性和文本需要使用get_attribute() 和.text
17.4 Cookie相关用法
- {cookie[‘name’]: cookie[‘value’] for cookie in driver.get_cookies()}
- driver.delete_cookie(“CookieName”)
- driver.delete_all_cookies()
17.5 页面等待
- 为什么需要等待
- 如果网站采用了动态html技术,那么页面上的部分元素出现时间便不能确定,这个时候就可以设置一个等待时间,强制要求在时间内出现,否则报错
- 强制等待
- time.sleep(10)
- 显式等待(了解)
- 显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了.
- WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,“myDynamicElement”))
- 隐式等待(了解)
- 就是简单地设置一个最大等待时间,单位为秒。
- driver.implicitly_wait(10)
17.6 Selenium总结
- 应用场景:
- 动态html页面请求
- 登录获取cookies
- 如何使用
- 导包并且实例化driver
- 发送请求
- 定位获取数据
- 保存
- 退出driver
- Cookies相关方法:
- get_cookies()
- 页面等待