"""
动态渲染页面页面抓取。
JavaScript除了可以Ajax直接获取数据之外,还可以通过计算生成,加密参数等形式
来更安全的获取数据。这些通过特别处理的数据我们很难找出规律直接Ajax去获取。
为了解决这些问题,我们可以直接使用模拟浏览器运行的方式来请求数据,这样可以
看到的是什么,抓取的源码就是什么,也可以避免去分析Ajax接口到底有什么参数。
Python提供的模拟浏览器运行的库:Selenium、Splash、PyV8等
"""

"""Selenium的用法解析
支持的浏览器Chrome、Firefox、PhantomJS还有Android、BlackBerry等手机端浏览器:
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
https://selenium-python.readthedocs.io/api.html     webdriver的API解释
"""
from selenium import webdriver                      # 可选择的浏览器
from selenium.webdriver.common.by import By         # 选择器方法
from selenium.webdriver.common.keys import Keys     # 键盘按键对应表
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait


# 声明浏览器对象并将其赋值为browser
browser = webdriver.Chrome()
try:
    # 调用get()方法请求网页
    browser.get("https://www.baidu.com")
    # 调用find_element_by_id()方法查找输入节点ID
    input = browser.find_element_by_id("kw")
    # WebElement类型结果。调用此类下的send_keys()方法输入查找关键字
    input.send_keys("Python")
    # 调用send_keys()输入键盘ENTER键
    input.send_keys(Keys.ENTER)
    # 传入webdriver实例browser和超时时间
    wait = WebDriverWait(browser, 10)
    # until()方法确认请求的结果不是False。presence_of_element_located()方法检查DOM上是否存在查询的该元素
    wait.until(EC.presence_of_element_located((By.ID, "content_left")))
    # 请求成功之后分别打印返回的当前url、cookies、网页源代码
    print(browser.current_url)
    print(browser.get_cookies())
    print(browser.page_source)
finally:
    # 最后关闭浏览器
    browser.close()
View Code

相关文章: