操作界面上的元素:
先选中元素再进行调用下面的方法
1)click(),点击对象
2)send_keys(),在对象上模拟进行输入
3)submit,提交对象的内容,和提交表单操作差不多,必须操作界面的元素是
<input type="submit" value="提交">
4)clear,清除对象上面的内容
5)text,获取元素文本
模拟场景:打开浏览器,在地址栏里面输入百度的网址之后,并在搜索输入框里面输入第一次要搜索的文字,然后清空输入框,再次输入文字进行搜索
from selenium import webdriver import time driver=webdriver.Edge("C:\Program Files\Python310\Scripts\msedgedriver.exe"); url="http://www.baidu.com"; driver.get(url); #1.选中元素进行第一次点击输入 driver.find_element_by_css_selector("#kw").send_keys("小姐姐"); time.sleep(2); driver.find_element_by_css_selector("#su").click(); time.sleep(2); #2.选中输入框进行清空,选择第二次输入,按钮点击 driver.find_element_by_css_selector("#kw").clear(); time.sleep(2); driver.find_element_by_css_selector("#kw").send_keys("微胖女孩"); time.sleep(2); driver.find_element_by_css_selector("#su").click();
from selenium import webdriver import time # 获得浏览器的驱动 driver = webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe") # 在浏览器搜索框里面输入要进行访问的web界面 driver.get("http://www.baidu.com") time.sleep(3) driver.find_element_by_css_selector("#kw").send_keys("中国") time.sleep(3) driver.find_element_by_id("su").submit() time.sleep(3) driver.find_element_by_id("kw").clear() time.sleep(3) driver.find_element_by_id("kw").send_keys("我爱你") time.sleep(3) driver.find_element_by_id("su").submit() time.sleep(3) driver.quit()
1)我们是想要获取百度页面最下面的这一部分广告内容
前提是对应的这部分的div的内容是全局唯一的,使用text属性就成功地获取到了内容,text用于获取元素的文本信息,先通过className来获取到元素
from selenium import webdriver import time # 获得浏览器的驱动 driver = webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe") # 在浏览器搜索框里面输入要进行访问的web界面 driver.get("http://www.baidu.com") time.sleep(3) text = driver.find_element_by_class_name("s-bottom-layer-content").text print(text) time.sleep(3) driver.quit()
2)使用text属性来获取到百度页面左上角的链接文字
咱们现在演示一下这个操作:
现在的目标是想要打印div里面的内容,通过print函数直接打印
from selenium import webdriver import time driver=webdriver.Edge("C:\Program Files\Python310\Scripts\msedgedriver.exe"); url="http://www.baidu.com"; driver.get(url); text=driver.find_element_by_id("s-top-left").text; print(text); driver.quit(); 打印结果:新闻hao123地图贴吧视频图片网盘更多
3)使用text属性来进行定位到左上角的hao123
本质上还是想要通过xpath来定位页面上的hao123,然后再通过text属性来获取到文本内容
rom selenium import webdriver import time # 获得浏览器的驱动 driver = webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe") # 在浏览器搜索框里面输入要进行访问的web界面 driver.get("http://www.baidu.com") time.sleep(3) text = driver.find_element_by_xpath("//*[@id='s-top-left']/a[2]").text print(text) time.sleep(3) driver.quit()
4)定位百度的热搜词
添加等待:
title=driver.title,获取当前页面的标题
url=driver.current_url,获取当前页面的urltime.sleep()是固定等待时间
driver.implicity_wait()是智能等待
1) time.wait()是固定时间等待,无论页面是否被加载出来,都等待这么长时间,时间到了才会进行下面的操作;
2)但是咱们的智能等待就不一样了,只要页面加载出来,即使页面加载的时候时间到了,咱们就可以进行接下来的操作了,如果页面迟迟加载不出来,那么就会抛出异常;
from selenium import webdriver import time #coding utf-8 driver=webdriver.Edge("C:\Program Files\Python310\Scripts\msedgedriver.exe"); url="http://www.baidu.com"; driver.get(url); driver.find_element_by_css_selector("#kw").send_keys("肖战") driver.find_element_by_css_selector("#su").click(); #driver.implicitly_wait(10); driver.find_element_by_link_text("肖战 - 百家号").click(); #time.sleep(2); title=driver.title//获取当前页面的标题 url=driver.current_url;//获取当前页面的url print(title); print(url); driver.quit(); selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"肖战 - 百家号"} (Session info: MicrosoftEdge=105.0.1343.53)
1)上面的程序会出现下面的异常,因为我们在浏览器点击肖战之后,咱们的搜索框进行搜索,但是搜索的过程中,程序是会进行加载的,但是咱们的脚本时会正常的进行立即执行的,而咱们的页面有加载不出来,所以就会找不到对应的元素
2)所以当我们在浏览器中点击肖战的时候,咱们就要进行设置一个延时时间,让咱们的程序等待一会在执行,但是咱们用time.sleep()又不算特别好因为你要等多长时间不确定(页面加载完成时间不可控,设置时间长,要是页面加载的时间特别长,等待时间设置的长也合理,但是在等待时间之前页面就加载完成了,这样程序还要进行等待,效率很低
3)所以我们通过driver.implicitly_wait(10)的方式来进行加载,页面好了就进行加载,如果页面过了指定时间还没有加载完成,那么直接抛出异常
浏览器页面的最大化:
1)driver.maximize_window()
设置浏览器的宽高:
2)driver.set_window_size(480,480),前面是宽后面是高,这个程序可以很好地反映这个浏览器页面的变化
from selenium import webdriver import time #coding utf-8 driver = webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe") driver.get("http://www.baidu.com") driver.maximize_window() time.sleep(4) driver.set_window_size(460,460) time.sleep(3) driver.quit()
浏览器的前进和后退:
driver.back()浏览器回退到到上一个页面
driver.forward()浏览器前进一个页面
代码演示:浏览器的前进和后退:
代码运行现象:浏览器打开搜狗界面之后大约2s回退到原来界面,等待2s侯又回到搜狗界面
from selenium import webdriver import time driver=webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe") driver.get("https://sougou.com/") time.sleep(2) driver.back() time.sleep(2) driver.forward() time.sleep(3) driver.quit()
对浏览器控制条滚动的控制:
浏览器的控制条的下拉:(基于JS来进行操作),这个是从最上边的界面拉到最下边的界面 js1="var q=document.documentElement.scrollTop=10000"; 执行js:driver.execute_script(js1) 下面这一个是从最下边的界面拉到最上边的界面: js2="var q=document.documentElement.scrollTop=0"; 执行js:driver.execute_script(js1) scrollTop的意思是距离浏览器的顶端多远
代码演示:打开浏览器,先进行打开搜狗界面,先把滚动条拉到最下面,再把滚动条拉到最上面
from selenium import webdriver import time webdriver=webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe") webdriver.get("http://www.sougou.com") time.sleep(3) js1="var q=document.documentElement.scrollTop=10000"; webdriver.execute_script(js1) time.sleep(3) js2="var q=document.documentElement.scrollTop=0"; time.sleep(3) webdriver.execute_script(js2) time.sleep(3) webdriver.quit()
driver.set_window_size(w,h) 设置浏览器大小 单位像素
driver.set_window_position(x,y) 设置浏览器位置
driver.refresh()刷新当前页面
写一个代码来演示下面三种操作:
from selenium import webdriver import time driver = webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe") time.sleep(3) url="http://www.baidu.com" driver.get(url) time.sleep(2) driver.set_window_position(40,80) driver.get("http://www.sougou.com") time.sleep(2) driver.refresh(); time.sleep(2); driver.close();
注意: