python爬虫等待网页加载_python爬虫之动态网页的加载selenium+chrome(phantonJS)

本篇依旧来自http://www.cnblogs.com/zhaof/p/6953241.html

个人只是做了一个笔记,方便相关信息的查找,具体可前往源文章。

fromselenium import webdriver

browser = webdriver.Chrome()

——个人用的是Chrome,若不想显示界面可以用PhantomJS

对于PhantomJS:browser = webdriver.PhantomJS(executable_path="phantomjs.exe")

——可能是电脑太差的缘故,所以加入phantomjs.exe的路径,方便调用PhantomJS

页面访问:browser.get("http://www.baidu.com")

获取网页源码:browser.page_source

注意:此时获取的源码是当前网页的源码,而不仅仅是右键点击查看源码中的源码

查找元素:

find_element_by_name

find_element_by_id

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

一般导入模块:from selenium.webdriver.common.by import By

就可以这么查找:

例如:input_first = browser.find_element(By.ID,"q")

查找多个元素:

将上面的element换成elements即可

注意:elements获取的是一个列表

一般情况遇到的动作:——对于交互动作不是很了解

输入文字:

input_str = browser.find_element_by_id('q')

input_str.send_keys("MakBook pro")

按钮:

button = browser.find_element_by_class_name('btn-search')

button.click()

执行JavaScript:

这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,

下面的例子是通过登录知乎然后通过js翻到页面底部,并弹框提示

from selenium import webdriver

browser = webdriver.Chrome()

browser.get("http://www.zhihu.com/explore")

browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')

browser.execute_script('alert("To Bottom")')

获取相关信息:

获取元素属性

get_attribute('class')

获取文本值

text

获取ID,位置,标签名

id

location

tag_name

size

有关页面的操作:

Frame

在很多网页中都是有Frame标签,所以我们爬取数据的时候就涉及到切入到frame中以及切出来的问题,通过下面的例子演示

这里常用的是switch_to.from()和switch_to.parent_frame()

对于等待:

1)外界作用:time模块中的 time.sleep()

2)使用webdriver的等待机制:

1.隐式等待

到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,

如果没有需要等待的时候就已经加载完毕就会立即执行

利用的是

browser.implicitly_wait(10)

2.显示等待

指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,

如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回

利用的是:

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

这三个模块的导入

然后一般这么写:

wait = WebDriverWait(browser, 10)———将这个方法简写,方便之后的调用

input = wait.until(EC.presence_of_element_located((By.ID, 'q')))

button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))

切记判断条件:

常用的判断条件:

title_is 标题是某内容

title_contains 标题包含某内容

presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')

visibility_of_element_located 元素可见,传入定位元组

visibility_of 可见,传入元素对象

presence_of_all_elements_located 所有元素加载出

text_to_be_present_in_element 某个元素文本包含某文字

text_to_be_present_in_element_value 某个元素值包含某文字

frame_to_be_available_and_switch_to_it frame加载并切换

invisibility_of_element_located 元素不可见

element_to_be_clickable 元素可点击

staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新

element_to_be_selected 元素可选择,传元素对象

element_located_to_be_selected 元素可选择,传入定位元组

element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False

element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False

alert_is_present 是否出现Alert

浏览器的操作:

browser.forward() 前进

browser.close() 后退

cookie操作:

get_cookies()

delete_all_cookes()

add_cookie()

选项卡管理:

通过执行js命令实现新开选项卡window.open()

不同的选项卡是存在列表里browser.window_handles

通过browser.window_handles[0]就可以操作第一个选项卡

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值