Selenium相关指令:
在输入命令代码前要先导入库和类:
from selenium import webdriver ———— 导入selenium的webdriver包。
只有导入,才能用webdriver开发脚本
from selenium.webdriver.common.keys import Keys
导入提供键盘操作的类
from selenium.webdriver.common.action_chains import ActionChains
导入提供鼠标操作的类:ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
导入WebDriverWait类
from selenium.webdriver.support import expected_conditions as EC # 导入expected_conditions类,并将它命名为EC
driver = webdriver.Chrome() /.Firefox()
用webdriver打开谷歌/火狐浏览器
driver.get(“url”)
访问 站
进入 站后会进行相应的操作,那么如何用代码来模拟人的操作呢:
首先我们需要对想要操作的对象进行定位,定位的常用方法:
1、xpath;
2、Css;
3、ID;
4、Class(在代码中是class_name);
5、link_text;
6、Name;
7、partial_link。
首先来看xpath定位:
#xpath元素定位:
driver = webdriver.Chrome() ————打开谷歌
driver.get(“https://www.bilibili.com/”)————访问bilibili 站
driver.maximize_window() # 窗口最大化
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”) ————利用xpath定位搜索框,并输入“jojo”
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)————再次利用xpath定位搜索框,输入回车
或者
driver.refresh() # 刷新界面 driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”) ————利用xpath定位搜索框,并输入“jojo”driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()————利用xpath定位搜索button,点击button
driver.quit()—————关闭浏览器
Xpath又分为 绝对路径 和 相对路径
绝对路径:从头到尾的路径显示,类似于:
html/body/div/div/div[2]/div/div/form/input
相对路径:从中间某个有唯一属性的标签开始,类似于:
//div[@id=‘banner_link’]/div/div/form/button
class元素属性定位:
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.refresh() # 刷新界面
driver.find_element_by_class_name(“search-keyword”).send_keys(“jojo”)
#————通过搜索框的class属性对其进行定位,并输入‘jojo’
driver.find_element_by_class_name(‘search-submit’).click()
#————通过搜索button的class属性进行定位,并单击
driver.quit()
注:class在代码中是class_name
link_text元素定位:
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_link_text(‘画友’).click()
#————通过link_text属性对‘画友’定位,并单击
driver.quit()
注:link_text用于有“href”(超链接)属性的目标元素
ID元素定位:
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_id(‘header-mobile-app’).click()
driver.quit()
css元素定位:
driver = webdriver.Firefox()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_css_selector(“.search-keyword”).send_keys(“jojo”)
driver.find_element_by_css_selector(“#app>div>div:nth-child(2)>div>div>form>input”).send_keys(“jojo”)
driver.find_element_by_css_selector(“#app>div>div:nth-child(2)>div>div>form>input”).send_keys(Keys.ENTER)
driver.quit()
注:
# 后跟ID内容
. 后跟class内容 标签带与不带随意
[name=‘wd’]
[maxlength=‘255’][name=‘wd’] 表示and关系 ——css方法 确保属性唯一
xpath 绝对路径:html/body/div…
css 绝对路径 html body div… 或 html>body>div…
css #form>span:nth-child(8)>input 定位到form标签下的第八个span下的input 注意此处的span为form标签下,从头往下数的位置
name元素定位:
driver = webdriver.Chrome()
driver.get(“https://www.baidui.com/”)
driver.find_element_by_name(‘wd’).send_keys(‘山水’)
driver.quit()
获取尺寸及其他骚操作
import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
size=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).size
print(size)
获取选中目标的尺寸
text=driver.find_element_by_xpath(“//div[@class=‘partner’]/div[2]/p”).text
print(text)
页面底部备案信息
attribute=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).get_attribute(‘type’)
attribute1=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).get_attribute(‘id’)
print(attribute)
print(attribute1)
由于选中目标没有ID属性,因此没有显示。
result=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).is_displayed()
print(result)
返回元素的结果是否可见,有点不太理解
driver.quit()
键盘事件与.clear
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_class_name(“search-keyword”).send_keys(“jojo”)
time.sleep(2)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.CONTROL,“a”)
time.sleep(2)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.CONTROL,“c”)
time.sleep(3)
driver.find_element_by_class_name(“search-keyword”).clear()
#driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.BACK_SPACE)
time.sleep(3)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.CONTROL,“v”)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.ENTER)
鼠标事件
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
time.sleep(3)
driver.maximize_window()
time.sleep(3)
ele=driver.find_element_by_xpath(“//div[@id=‘primary_menu’]/ul/li[3]/a/div[2]”) # 定位该xpath下的元素
ActionChains(driver).move_to_element(ele).perform()
time.sleep(6) # 用于生成模拟用户行为,鼠标移动到指定元素,执行储存行为
ele1=driver.find_element_by_xpath(“//div[@id=‘primary_menu’]/ul/li[3]/ul/li[5]/a”)
ele1.click()
time.sleep(6)
driver.quit()
#鼠标右键(context_click()) , 双击(double_click()) , 单击(click()),可用键盘事件中的回车键代替
back回退 以及 forward前进
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_xpath(“//div[@id=‘primary_menu’]/ul/li[2]/a”).click()
driver.back()
time.sleep(3)
driver.forward()
time.sleep(1)
driver.quit()
元素等待时间:
时间等待
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
导入expected_conditions类,并将它命名为EC
driver = webdriver.Chrome()
time.sleep(3)
强制等待时间,3秒
driver.get(“https://www.bilibili.com/”)
driver.implicitly_wait(10)
隐式等待时间 设置的隐式等待时间最大为10秒
driver.find_element_by_class_name(“search-keyword”).send_keys(“jojo”)
WebDriverWait(driver, 5, 0.5)
显示等待时间,5 为最长时间,0.5 为每隔0.5秒检查一次
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)
time.sleep(3)
driver.quit()
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get(‘https://www.bilibili.com/’)
driver.refresh()
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(‘火影’)
driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()
locator = (By.PARTIAL_LINK_TEXT, u’博人传’)
try:
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
print(driver.find_element_by_partial_link_text(u’博人传’).get_attribute(‘href’))
finally:
driver.quit()
对于until与until_not的用法还是不清楚
验证信息提取也存在问题:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
导入提供鼠标操作的类:ActionChains
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.refresh()
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”)
driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()
time.sleep(5)
title = driver.title
print(title)
就像上面代码操作的一样,在页面跳转后提取title和url,但是得到的还是原来的title和url
部分关键字匹配
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_class_name(“search-keyword”).send_keys(u”火影”)
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)
time.sleep(3)
driver.find_element_by_partial_link_text(u’博人传’).click() # 此处为匹配处
上面的代码可以定位单击,但是下面的却无法定位单击
driver.find_element_by_class_name(“search-keyword”).send_keys(u”jojo”)
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)
time.sleep(3)
ele = driver.find_element_by_partial_link_text(u’黄金之风’).get_attribute(‘href’)
time.sleep(6)
print(ele)
driver = webdriver.Firefox()
driver.get(ele)
刷新 及 查看输入内容
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.maximize_window() # 窗口最大化
driver.refresh()
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”)
print(driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).get_attribute(‘value’))
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)
driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!