[以下均为个人理解](可能欠缺一定的严谨性)
动态网页概念:页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变 eg:小饭桌[url:https://www.xfz.cn/]
点击查看更多后加载了新的内容。
但即使AJAX加载的数据使用了JSON将数据渲染到页面中,仍是无法通过查看网页源代码看到新加载的数据
动态网页通常通过AJAX(Asynchronouse JavaScript And XML)既异步JavaScript 和 XML。在不重新加载整个页面的情况下,对网页某部分进行更新,既通过后台与服务器进行少量数据交换,实现异步更新。
[注:通常现在的数据交互基本都是使用JSON]
所以本文使用Selenium+chromedriver获取动态数据
[Selenium相当于是一个机器人。可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等]
基本框架和操作语句
from selenium import webdriver
#导入
driver_path = r’D:\python_space\new_programapp\chromedriver.exe’
#绝对路径
driver = webdriver.Chrome(executable_path=driver_path)
#初始化一个driver,并且指定chromedriver的路径
driver.get(“https://www.baidu.com/”)
#请求并自动打开网站
print(driver.page_source)
#通过page_source获取网页源代码
driver.close():关闭当前页面。
driver.quit():退出整个浏览器。
selenium定位元素常用操作 [以百度为例]
定位输入框
可通过id,class_name,name,tag_name,xpath,css_selector查找元素 eg:
driver.get(“https://www.baidu.com/”)
[inputTag = driver.find_element_by_id(‘kw’)]
==[inputTag = driver.find_element(By.ID,‘kw’)] (from selenium.webdriver.common.by import By)
inputTag.send_keys(‘python’)
#给文本框输入’python’
inputTag.clear()
#清除输入框中的内容
checkbox相应操作:eg:
进行点击操作
rememberTag = driver.find_element_by_name(“remember”)
rememberTag.click() #点击
rememberTag.click() #再次点击既取消
选择select eg:
[url:http://www.95yueba.com/index.php?route=product/category&path=59]
from selenium.webdriver.support.ui import Select
#选中这个标签,然后使用Select创建对象
selectTag = Select(driver.find_element_by_id(“input-limit”))
#根据索引选择
selectTag.select_by_index(1)
#根据值选择
==selectTag.select_by_value(“http://www.95yueba.com/index.php?route=product/category&path=59&limit=25”)
#根据可视的文本选择
==selectTag.select_by_visible_text(“25”)
selectTag.deselect_all()
#取消选中所有选项
[注:有下拉框即为select类型]
切换页面
#打开一个新的页面
driver.execute_script(“window.open(’”+url+"’)")
#切换到这个新的页面中
driver.switch_to_window(driver.window_handles[0])
设置代理ip:
options = webdriver.ChromeOptions()
options .add_argument (" –proxy-server=http:// 110.73.2.248:8123")
driver_path = r"D:\python_space\new_programapp\chromedriver.exe"
driver=webdriver.Chrome(executable_path=driver_path,chrome_options=options)
常见WebElement元素:
from selenium.webdriver.remote.webelement import WebElement
drive.save_screentshot(‘文件名.png’):获取当前页面的截图。
drive.get_attribute(“value”):这个标签的某个属性的值。(百度一下)
eg:submitBtn=driver.find_element_by_id(‘su’)
driver.save_screenshot(‘baidu.png’)