动态网络爬取(二)
一.入门操作
1. 获取页面内容
driver.get("输入网站")
2. 创建浏览器对象
driver=webdriver.PhantomJS()
3.获取页面名为wrapper的id标签的文本内容
data=driver.find_element_by_id("wrapper").text
data
4.打印页面标题
print(driver.tltle)
5.生成当前页面快照并保存
driver.save_screenshot("*.png")
True
6.打印页面源码
print(driver.page_source)
二.鼠标动作链
1.导入ActionChains类
from selenium.webdriver import ActionChains
2.鼠标移动到元素位置
ac=driver.find_element_by_xpath('element')
ActionChains(driver).move_to_element(ac).perform()
3.在元素位置单击
ac=driver.find_element_by_xpath('elementA')
ActionChains(driver).move_to_element(ac).click(ac).perform()
4.在元素位置双击
ac=driver.find_element_by_xpath('elementB')
ActionChains(driver).move_to_element(ac).double_click(ac).perform()
5.在元素位置右击
ac=driver.find_element_by_xpath('elementC')
ActionChains(driver).move_to_element(ac).context_click(ac).perform()
6.在元素位置左键单击并保持
ac=driver.find_element_by_xpath('elementD')
ActionChains(driver).move_to_element(ac).click_and_hold(ac).perform()
7.将元素拖动到另一位置
ac1=driver.find_element_by_xpath('elementE')
ac2=driver.find_element_by_xpath('elementE')
ActionChains(driver).drag_and_drop(ac1,ac2).perform()
三.填充表单
对于下拉列表框,selenium专门提供了select类来处理,该类提供了选择下拉列表框的3种方式:
#导入select类
from selenium.webdriver.support.ui import Select
#找到下拉框元素
select=Select(driver.find_element_by_name('status')
#选择下拉框的某一个选项
select.select_by_index(0)#根据索引选择
select.select_by_value("0")#根据值选择
select.select_by_visible_text(u"未审核")#根据文字选择
取消全部选择
select.deselect_all()
四.弹窗处理
alert=driver.switch_to_alert()
五.页面切换
切换窗口的方法:
driver.switch_to.window('this is window name')
也可以使用window_handles()方法来获取每个窗口的操作对象:
for handle in driver.window_handles:
driver.switch_to_window(handle)
六.页面前进与后退
driver.forward() #前进
driver.back() #后退
七.获取页面Cookies
获取cookies:
for cookies in driver.get_cookies():
print("%s=%s;"%(cookies['name'],cookies['values']))
删除Cookies:
driver.delete_cookies("BAIDUID")#根据cookies名称删除
driver.delete_all_cookies()#删除该页面上的所有cookies
八.页面等待
1.显示等待
显示等待指定某个条件,然后设置最长等待时间。如果这个时间结束时还没有找到元素,就会抛出异常
WebDriverWait(driver,timeout,poll_frequency=0.5,
ignored_excepptions=None)
2.隐式等待
只要超出时间,就会抛出异常,较暴力,不再赘述
实例:模拟登录豆瓣,并截图登录后的页面
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import getpass
username=getpass.getpass('username')
password=getpass.getpass('password')
driver=webdriver.Chrome()
driver.get("https://www.douban.com/")
iframe=driver.find_element_by_xpath("//div[@class='login']/iframe")
driver.switch_to_frame(iframe)
driver.find_element_by_xpath('//li[@class="account-tab-account"]').click()
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("password").send_keys(password)
driver.find_element_by_xpath("//a[contains(@class,'btn-account')]").click()
try:
element=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'wrapper')))
print("ok")
driver.save_screenshot("2018060358.png")
print(driver.page_source)
print("ok!")
except Exception as e:
print(e)
finally:
driver.quit()