【Selenium】Selenium 常用方法(定位、点击。。。)

在这里插入图片描述

Selenium多种定位方式

导入模块

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver import ChromeOptions
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

初始化浏览器

browser = webdriver.Chrome()
wait = WebDriverWait(browser, 60)

几个主要方法:

语法返回值说明
text_to_be_present_in_element()True or False文本存在元素
presence_of_element_located()node element存在元素
element_to_be_clickable()node element可点击节点

关于匹配

匹配页面中的文本 submit,如果不存在则返回 -1

driver.page_source.find('submit')

关于下拉框

选择下拉框中的内容,注意只能匹配下拉框节点为 select 的节点。

  1. 选择到 Xpath 节点(例如下拉框中有3个选项:手機號碼手機號碼
  2. 选择 手機號碼
_select = Select(driver.find_element_by_xpath('xpathExparess'))
_select.select_by_visible_text('手機號碼')

关于定位节点

定位到 指定的 Xpath表达式的节点

# 方法一
driver.find_element_by_xpath('xpathExpress')
# 方法二
wait.until(EC.presence_of_element_located((By.XPATH, 'xpathExpress')))

定位到 div 节点中 并且 文本内容为 手機號碼 的节点

# 方法一
driver.find_element_by_xpath("//div[contains(text(), '手機號碼')]")
# 方法二
wait.until(EC.text_to_be_present_in_element((By.XPATH, "//div"), '手機號碼'))

定位div节点 中 包含文本内容为 手機號碼,且 class属性为 xxx 的节点

# 方法一
driver.find_element_by_xpath('//span[contains(text(), "手機號碼") and @class="xxx"]')
# 方法二
wait.until(EC.presence_of_element_located((By.XPATH, '//div[contains(text(), "手機號碼") and @class="xxx"]')))
  • 以上的三种操作足以定位到绝大多数的节点。

关于点击节点

点击节点 这一部分具体上和 定位节点 总体大同小异,区别在于后面添加了 一个 click()

点击 指定的 Xpath表达式的节点

# 方法一
driver.find_element_by_xpath('xpathExpress').click()
# 方法二
wait.until(EC.presence_of_element_located((By.XPATH, 'xpathExpress'))).click()

点击 div 节点中 并且 文本内容为 手機號碼 的节点

# 方法一
driver.find_element_by_xpath("//div[contains(text(), '手機號碼')]").click()
# 方法二
wait.until(EC.text_to_be_present_in_element((By.XPATH, "//div"), '手機號碼')).click()

点击div节点 中 包含文本内容为 手機號碼,且 class属性为 xxx 的节点

# 方法一
driver.find_element_by_xpath('//span[contains(text(), "手機號碼") and @class="xxx"]').click()
# 方法二
wait.until(EC.presence_of_element_located((By.XPATH, '//div[contains(text(), "手機號碼") and @class="xxx"]'))).click()

点击可点击 的 Xpath节点

wait.until(EC.element_to_be_clickable((By.XPATH, 'xpathExpress'))).click()

点击可点击 的 div节点 且包含 文本内容 手機號碼

wait.until(EC.element_to_be_clickable((By.XPATH, '//div[contains(text(), "手機號碼") and @class="xxx"]'))).click()

拓展一下:

  • 以上的用法可以点击到绝大多数的节点,
  • 但是!!总还会有一些特别奇怪的节点,用以上的方法无法点击到节点。

总结一下用下面几种方法解决。

方法一:

  • 首先获取一个节点,例如 button = wait.until(EC.element_to_be_clickable 参照 定位节点
  • 然后调用 Selenium 执行 Js 的函数进行 点击。
driver.execute_script("arguments[0].click();", button) 

方法二:

  • 首先获取一个节点,例如 button = wait.until(EC.element_to_be_clickable 参照 定位节点
  • 然后调用鼠标事件,进行点击。
ActionChains(driver).click(button).perform()

方法三:

  • 首先获取需要点击的节点的 坐标,即相对于 Selenium 的x轴 和 y轴。
  • 然后调用鼠标事件,进行点击。
# xoffset 和 yoffset 分别为节点坐标的 x 和 y
ActionChains(driver).move_by_offset(xoffset=x, yoffset=y).click().perform()
# 执行这一步释放鼠标,(可选
ActionChains(driver).release()

========================================================

========================================================

========================================================

关于填写内容

选择某节点,然后输入 xxx

driver.find_element_by_xpath('xpathExpress').send_keys('xxx')
wait.until(EC.presence_of_element_located((By.XPATH, 'xpathExpress'))).send_keys('xxx')

关于页面滑动

滑动页面到 指定Xpath 节点处

  • 首先获取一个节点,例如 button = wait.until(EC.element_to_be_clickable 参照 定位节点
  • 然后调用 Selenium 执行 Js 的函数进行 滑动页面。
driver.execute_script("arguments[0].scrollIntoView();", button)

滑动页面到最底端

  • 运行即可。
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')

关于切换窗口


关于切换frame

切换到 名称 为 sunrisecaiframe 子页面

  • 标签 idtag_name 也可以定位到。
driver.switch_to.frame('sunrisecai')
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, 'sunrisecai')))

切换到指定索引的 frame 子页面

  • 切换到索引为 0frame 子页面,针对不知页面的 frame 子页面名称 ,比较有用。
driver.switch_to.frame(0)
wait.until(EC.frame_to_be_available_and_switch_to_it(0))

切换到

driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])

无图片模式运行

options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images": 2}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 30)	# 最长等待30秒

绕过网站监测

driver.execute_script('''
                 event = document.createEvent('MouseEvents');
                 event.initEvent('mousedown', true, false);
                 document.querySelector("#nc_1-stage-1 > div > div.button").dispatchEvent(event);
                 event = document.createEvent('MouseEvents');
                 event.initEvent('mousemove', true, false);
                 Object.defineProperty(event,'clientX',{get(){return 1505;}})
                 document.querySelector("#nc_1-stage-1 > div > div.button").dispatchEvent(event);
                ''')

先分享到这,,

  • 14
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
常用命令篇: 1. Open(url) url可以是相对的,也可以是绝对的 如绝对的url:open(http://www.taobao.com/) 相对的url:open("/search?q=’aa’"); 2. Click(locator) click可以单击一个链接,按钮或者单选框复选框等。 Click系列的有:click、clickAt、clickAndWait、clickAtAndWait clickAt(locator,coordstring): coordstring是需要单击的坐标 3. doubleClick(locator) 双击操作,用户与click一致 4. type(locator,value) 可以为指定位置输入指定值,也可以为单选框和复选框按钮赋值,value是选项的值而不是文本内容 5. typeKeys(locator,value) 模拟用户输入的行为,与type不同的是,type是强行赋值,而typeKeys是完全模拟用户操作,一个键一个键敲上去的。当输入框中原来就有值时,使用type会用新值替换旧值,而typeKeys则是在原来值上进行追加。如,原来值为aaa,现在要输入bbb,使用type则最终值为bbb,使用typeKeys则最终值为aaabbb. 6. focus(locator) 将焦点移动到指定的元素上,如果是一个可输入的元素,则将聚焦到输入框 7. select(locator,option) 选择下列框中的选项,option默认为标签label 如selenium.select (“size_select”,”label=small”),id=size_select 8. selenium.goBack()后退 9. highlight(locator)指定元素高亮 10. refresh()刷新当前页面 11. AssertText(locator,pattern) 验证某个元素的文本值是否与预期值一致,locator为元素定位,pattern为预期值 12. AssertAttribute(attributelocator,pattern) 验证某个元素的某个属性值与预期值是否一致,attributelocator为属性定位,pattern为预期值 13.assertEquals(value,selenium.getAttribute(xpath+"@value")) 验证某个元素的属性值或者是文本值是否与预期值一致 14. assertInPara(remark_para_1, getRemark(engine_type)); 一般用于验证url和remark串 15. mouseOver(locator) 将鼠标停留在某个元素上,locator为元素定位。 16. mouseDown(locator)/mouseUp(locator) 用户在某个元素上按下或者释放鼠标。Locator为元素定位 17. keyDown(locator,keysequence)/ keyUp(locator,keysequence) 用户按下或者释放某一个按钮,Locator为元素定位,keysequence为按键对应的ASCII码 18. indexOf:判断两个字符串是否存在包含关系 若x=”abcd”;y=”bc”;则有X.indexOf(y)==0 若不存在包含关系,则X.indexOf(y)==-1 19. System.out.println(value); 可以向屏幕打印出value值,这个value值可以是元素的属性值或者文本值等 20. selenium.getCookie(); 可以取到当前页面的cookie值 21. selenium.deleteCookie(name,path) 删除cookie值中的某个参数,如下: selenium.deleteCookie("_nk_","path=/, domain=.taobao.com, recurse=true"); 删除_nk_参数,path的格式必须指定上面三个字段,path=/表示当前路径,domain=.taobao.com为改cookie所属的域,recurse=true 22. assertValue(locator,pattern) 验证某个可输入元素是否被赋了某个值 23. selenium.close() 关闭浏览器。 24. contextMenu(locator)打开关联的菜单,与右键作用差不多,但是对弹出的菜单selen

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是小菜欸

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

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

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

打赏作者

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

抵扣说明:

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

余额充值