python Selenium浏览器爬虫指南 --未完成版本

# 打开浏览器
from selenium.webdriver.edge.service import Service

service = Service(executable_path=".././msedgedriver.exe")
browser = webdriver.Edge(service=service)

browser.get(r'https://www.baidu.com/')

# 截图
browser.get_screenshot_as_file('截图.png')
# 设置浏览器大小

# 全屏
browser.maximize_window() 
# 设置分辨率 500*500
browser.set_window_size(500,500) 
# 设置分辨率 1000*800
browser.set_window_size(1000,800)
# 刷新页面
browser.refresh()
# 页面后退
browser.back()
# 页面前进
browser.forward()
# 获取页面基础属性

print(browser.title)
# 当前网址
print(browser.current_url)
# 浏览器名称
print(browser.name)
# 网页源码
print(browser.page_source)
# 单机元素并单击
browser.find_element(by=By.ID, value="su").click()
# 搜索框模拟回车操作

find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.link_TEXT,u"新闻")
find_element(By.PARTIAL_link_TEXT,u"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
# 八大定位具体使用方法

# by表示当前使用什么元素定位,我们可以进入By模块里可以看到By类下的八种属性,value表示当前属性的值

1.ID具有唯一性,若是当前标签含有id属性,可以优先使用id定位。
driver.find_element(by=By.ID, value='id后面的字符串')

2.name属性不唯一,一个页面可能有多个相同的name值,所以使用时要确保该属性值是唯一的
driver_name = driver.find_element(by=By.NAME, value='q')
driver_name.send_keys("作者是帅哥")

3.CLASS_NAME
driver_name = driver.find_element(by=By.CLASS_NAME, value='sb_form_q')
driver_name.send_keys("作者是帅哥")

4.LINK_TEXT,用于<a>标签定位
driver_name = driver.find_element(by=By.LINK_TEXT, value='文案')
driver_name.click()  # click点击事件

5.PARTIAL_LINK_TEXT,PARTIAL_LINK_TEXT与LINK_TEXT相似,都是用于超链接,区别在于前置value为模糊查询,后者匹配相等
driver_name = driver.find_element(by=By.LINK_TEXT, value='案')
driver_name.click()  # click点击事件

6.TAG_NAME, 用于标签定位(<a><p><input>....),该元素定位不常用,效率低
driver_name = driver.find_element(by=By.TAG_NAME, value='input')
driver_name.send_keys("作者是帅哥")

7.XPATH
(1)可理解为元素路径定位,内含两种定位,绝对路径和相对路径
		绝对路径:以/html开头
		相对路径:以//*开头
		driver.find_element(by=By.XPATH, value="//*[@id='sb_form_q' and @name='q']").send_keys("作者是帅哥") #相对路径
		driver.find_element(by=By.XPATH, value="/html/body/div[2]/div/div[3]/div[2]/form/div[1]/input").send_keys("作者是帅哥") #绝对路径

网页开发者模式F12下的复制:
	Copy XPath 		: 相对路径
	Copy full XPath : 相对路径

(2)XPATH用法拓展(适用于相对路径)
		(1).contains用法 [contains(@属性,"属性值")]:模糊匹配
		driver.find_element(by=By.XPATH, value="//*[contains(@name,'na') and (@id,'sb_form_q')]").send_keys("作者说帅哥")
		
		(2).starts-with用法 [starts-with(@属性,"属性值")]:匹配以XXX开头
		driver.find_element(by=By.XPATH, value="//*[starts-with(@name,'2') and contains(@id,'2')]").send_keys("12")
	
8.CSS_SELECTOR
	(1)层级语法定位 网页开发者模式F12下的复制:层级定位可直接copy selector即可
	driver.find_element(by=By.CSS_SELECTOR, value="copy selector").click()
	(2)选择器定位
		1.id选择器,这里需要在value值前加个#
		driver.find_element(by=By.CSS_SELECTOR, value="#sb_form_q").click()
		2.class选择器
		driver.find_element(by=By.CSS_SELECTOR, value="[class='sb_form_q']").send_keys("class选择器") #精准匹配
		3.属性选择器
		语法一:value="[属性='属性值']"
		driver.find_element(by=By.CSS_SELECTOR, value="[name='q']").send_keys("属性选择器")
		driver.find_element(by=By.CSS_SELECTOR, value="[id='sb_form_q']").send_keys("属性选择器")
		
		语法二:value="标签[属性=‘属性值’]"
		driver.find_element(by=By.CSS_SELECTOR, value="a[id='halou']").click()

	(3)CSS_SELECTOR拓展
	匹配以XX开头:value="[id^='head']")
	匹配以XX结尾:value="[id$='tail']"
	模糊匹配:valur="[name*='like']"

# end

XPATH定位

  1. /开头,绝对路径,非常依赖于页面的顺序和位置
  2. //开头,相对路径,不依赖于页面的顺序和位置,只看整个页面当中有没有符合表达式的元素
  3. .选取当前节点,..选取当前节点的父节点
  4. @ 选取属性 ,//标签名称[@属性名称=值] 比如://*[@id="kw"
  5. 逻辑运算 and 条件or 条件//标签名称[@属性名称=值 and 属性名称=值 ]//div[@class="xxx" and contains(@style,"display:visibility")]
  6. *通配符。匹配所有 //* ; @*通配符。匹配所有属性 //*[@*="hello"]

语法规则

表达式作用
nodename选取此层级节点下的所有子节点
/代表从根节点进行选取
//可以理解为匹配,就是在所有节点中选取此节点,直到匹配为止
.选取当前节点
选取当前节点上一层(上一级目录)
@选取属性(也是匹配)

标签定位

方式效果
/html/body/div表示从根节点开始寻找,标签与标签之间/表示一个层级
/html//div表示多个层级 作用于两个标签之间(也可以理解为在html下进行匹配寻找标签div
//div从任意节点开始寻找,也就是查找所有的div标签
./div表示从当前的标签开始寻找div

属性定位

需求格式
定位div中属性名为href,属性值为‘www.baidu.com’的div标签@属性名=属性值
href为属性名 'www.baidu.com’为属性值/html/body/div[href=‘www.baidu.com’]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又搞砸了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值