动态HTML
"""
基本原理:
发送请求后、返回页面代码、再页面代码中进行定位使页面更新的部分(例如ajax代码),从中定位更新时 ajax是向服务器以何种方式、发送了什么参数进行更新界面,模拟更新界面的发送方法 向服务器进行发送更新请求,并接收返回数据,对返回数据进行帅选出想要的数据,然后再进行模拟发送,以次循环。
1、JS
- 常用的脚本语言,可收集用户的跟踪数据、不需要重载页面、直接提交表单、在页面嵌入多媒体文件、甚至运行网页
2、jQuery
- 一种javaScript框架、封装了JavaScript常用的功能代码
3、ajax
- 使页面实现异步更新,可以在不重载整体的页面的情况下,对网页的某部分进行更新
"""
# 获取ajax数据的方式
# 1、直接分子ajax调用的接口,通过代码请求接口
# 2、使用selenium + chromedrive 模拟浏览器行为获取数据
phantpmjs# 一款无界面的webkit 浏览器,讲网站加载到内存,并执行页面的javasctipt
**# phantomjs 案例**
from selenium import webdriver
driver = webdriver.PhantomJS("安装目录")
driver.get("https://www.baidu.com")
driver.save_screenshot("baidu.png") # 截图
# 2、定位和操作
driver.find_element_by_id("kw").send_keys("长城")
driver.find_element_by_id("su").click()
# 3、查看请求信息
driver.page_source
driver.get_cookies()
driver.current_url
# 4、退出
driver.quit() # 退出浏览器
selenium # 一款无界面的webkit 浏览器,讲网站加载到内存,并执行页面的javasctipt
# 安装selenium
pip install selenium
**# selenium 案例**
from selenium import webdriver
from selenium.webdriver.common.by import By
# 实例化浏览器
driver = webdriver.Chrome()
# 发送请求
driver.get("https://www.baidu.com")
# 打印页面源代码
print(driver.page_source)
# 退出浏览器
driver.quit()
**# 定位元素**
"""
find_element 获取第一个满足条件的元素
find_elements 获取所有满足条件的元素
"""
find_element_by_id # 根据id 来查找某个元素
submitTag1 = driver.find_element('su')
submitTag1 = driver.find_element(By.ID,'su')
find_element_by_class_name # 根据类名查找元素
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
find_element_by_name # 根据name属性的值来查找元素
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.fing_elemengt(By.NAME,'email')
find_element_by_tag_name # 根据标签名来查找元素
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
find_element_by_xpath # 根据xpath语法来获取元素
submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')
find_element_by_css_selector # 根据css选择器选择元素
submitTag = driver.find_element_by_css_selector('//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')
**# 操作表单元素**
"""
1、找到对应元素
2、使用send_keys(value),讲数据填充进去
"""
inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('python')
# 清除输入框中的内容(clear() 方法 )
inputTag.clear()
# 操作checkbox (先选中checbox标签,然后click)
rememberTag = driver.find_element_by_name("rememberMe")
rememberTag.click()
# 获取frame标签内内容
driver.switch_to_frame() # 用于获取 iframe 标签
driver.switch_to.frame(driver.find_element_by_id('iframe'))
#针对下拉框(选择 select)不能直接点击(点击后还需要选中)
import selenium.webdriver.support.ui import Select
selectTag = Select(driver.find_element_by_class_name('nojs'))
# 下拉框的选择方式
selectTag.select_by_value('JP') # 根据值来选择
selectTag.select_by_index(2) # 根据索引引入选择
# **行为链**
"""
页面中有多步操作,可以使用鼠标行为链类 ActionChains 来完成
"""
actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.context_click()
actions.click(submitTag)
actions.perform() # 操作提交
click_and_hold(element) # 点击但不松开⿏标。
context_click(element) # 右键点击。
double_click(element) # 双击
**# cookie操作**
cookies = driver.get_cookies() # 获取cookie
value = driver.get_cookie(key) # 根据cookie的name获取cookie
driver.delete_cookie('key') # 删除cookie值
**# 页面等待**
# 隐式等待 :调用driver.implicitly_wait ,在获取不可用元素之前,先等待10秒
driver.implicitly_wait(10) # 页面元素没加载出来会等待10秒钟
# 显式等待 :表明某个条件成立后才之执行获取元素的操作
selenium.webdriver.support.excepted_conditions # 期望的条件和
selenium.webdriver.support.ui.WebDriverWait # 来配合完成
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement")) # 等待此条件成立
)
finally:
driver.quit()
# ⼀些其他的等待条件
presence_of_element_located # 某个元素已经加载完毕了。
presence_of_all_emement_located # ⽹⻚中所有满⾜条件的元素都加载完毕了
element_to_be_cliable # 某个元素是可以点击了
# 打开多窗口和切换页面(selenium 提供 switch_to_wondow 进行切换,切换到的界面可以在driver.window_hanles中找到)
# 打开新页面
driver.execute_script("window.open('url')")
print(driver.current.url)
#切换到新的页面中
driver.switch_to_window(self.driver.window_handles[1])