前言遇到問題:document.getElementsByClassName(…)[0] is undefined input選擇框1.先看下彈出框的常見,如下這種 2.查看元素屬性,是input標(biāo)簽,并且是readonly屬性,說明不能被輸入 js調(diào)試1.首先嘗試了selenium的定位方法,發(fā)現(xiàn)點(diǎn)輸入框是可以彈出選項(xiàng)的,只是點(diǎn)選項(xiàng)死活點(diǎn)不了。于是在瀏覽器用js去調(diào)試 先點(diǎn)輸入框,讓它彈出選項(xiàng) 元素屬性
<input class="el-input__inner" type="text" autocomplete="off" placeholder="請(qǐng)選擇" readonly="readonly">
2.等選項(xiàng)彈出來了,再次在瀏覽器輸入js去點(diǎn)選項(xiàng) 元素屬性
<ul class="el-scrollbar__view el-select-dropdown__list" style="position: relative;">
<li class="el-select-dropdown__item hover">
<span>車贏銀行</span>
3.于是用selenium執(zhí)行js,部分參考代碼如下 js1 = "document.getElementsByClassName('el-input__inner')[2].click();"
self.driver.execute_script(js1)
time.sleep(1)
js2 = "document.getElementsByClassName('hover')[0].click();"
self.driver.execute_script(js2) 運(yùn)行報(bào)錯(cuò): selenium.common.exceptions.WebDriverException: Message: document.getElementsByClassName(…)[0] is undefined 看這個(gè)報(bào)錯(cuò)后反復(fù)檢查了語(yǔ)法,發(fā)現(xiàn)沒毛病,并且反復(fù)在瀏覽器調(diào)試,也沒問題,差點(diǎn)懷疑人生了?。?!后來發(fā)現(xiàn)是前面一個(gè)js執(zhí)行后失去了焦點(diǎn),導(dǎo)致第二個(gè)js找不到焦點(diǎn)了 移動(dòng)鼠標(biāo)1.當(dāng)元素失去焦點(diǎn)后,死后定位不到,這個(gè)就好比你在瀏覽器上瀏覽小電影的時(shí)候,突然有個(gè)人發(fā)給QQ抖動(dòng)窗口,此時(shí)你想繼續(xù)瀏覽小網(wǎng)站,你需要重新點(diǎn)下網(wǎng)頁(yè),讓鼠標(biāo)聚集在網(wǎng)頁(yè)上才能操作。 2.使用ActionChains移動(dòng)鼠標(biāo)到需要點(diǎn)擊的元素上,參考代碼 from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
# ** 作者:上海-悠悠 QQ交流群:588402570**
driver=webdriver.Firefox()
# 省略中間步驟
js1 = "document.getElementsByClassName('el-input__inner')[2].click();"
self.driver.execute_script(js1)
time.sleep(1)
el = driver.find_element_by_xpath("http://*[text()='車贏銀行']")
ActionChains(self.driver).move_to_element(el).perform()
js2 = "document.getElementsByClassName('hover')[0].click();"
self.driver.execute_script(js2) 《python自動(dòng)化selenium+appium》8月11號(hào)開學(xué)!(2個(gè)月2000,包教會(huì)) seleniumQQ群:646645429 |
|