Python3之selenium實踐道雲配置修改自動化程式碼實現
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
import re
browser = webdriver.Chrome()
# 程式碼不起作用需要找到與瀏覽器對應的chromedriver版本
browser.maximize_window()
browser.get("https://xx.xx.xx.xx/login.html")
browser.find_element_by_css_selector('#login > div.login-page > div.perspective-box > div > div > div:nth-child(1) > div > div > div > div.dao-popover-rel > input[type="text"]').send_keys("")
browser.find_element_by_css_selector('#login > div.login-page > div.perspective-box > div > div > div:nth-child(2) > label > div > div > div > div.dao-popover-rel > input[type="password"]').send_keys("")
time.sleep(5)
browser.find_element_by_css_selector('#app > div.layout > menu > div.menu-panel > div > section:nth-child(4) > menu:nth-child(6) > span > span.name').click()
browser.find_element_by_css_selector('#app > div.layout > menu > div.menu-panel > div > section:nth-child(4) > menu:nth-child(6) > ul > li:nth-child(1) > span > span.name').click()
browser.find_element_by_css_selector('#app > div.global-navigator-container > nav > div.nav-center-container > div > a > span.caret-select').click()
#time.sleep(1)
browser.find_element_by_css_selector('#app > div.global-navigator-container > nav > div.nav-center-container > div > ul > li:nth-child(12) > span').click()
time.sleep(3)
tbody = browser.find_element_by_xpath('//*[@id="app"]/div[3]/div/div/div[1]/div[2]/div[1]/table/tbody')
alinks = tbody.find_elements_by_tag_name("a")
for x in range(len(alinks)):
time.sleep(5)
tbody = browser.find_element_by_xpath('//*[@id="app"]/div[3]/div/div/div[1]/div[2]/div[1]/table/tbody')
now_handle_tab = browser.current_window_handle
tbody.find_elements_by_tag_name("a")[x].click()
time.sleep(1)
trss = browser.find_elements_by_xpath('//*[@id="app"]/div[3]/div/div/div[2]/div[2]/div/div[3]/div/div[2]/div[1]/table/tbody')
for tt in trss:
# 備份
if "APP_OPTS" in tt.text:
with open("eruka.json","w") as f:
f.write(tt.text)
browser.find_element_by_xpath('//*[@id="app"]/div[3]/div/div/div[2]/div[2]/div/div[3]/div/div[2]/div[2]/button/span[1]').click()
app_ops_text = browser.execute_script('return document.getElementsByTagName("textarea")[0].value')
# 獲取舊配置,修改密碼
result = re.sub("direwolf:direwolf",":",app_ops_text)
browser.find_element_by_xpath('//*[@id="app"]/div[3]/div/div/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[2]/div/div/div[4]/textarea').clear()
time.sleep(3)
txtcontent = 'var ta = document.getElementsByTagName("textarea")[0];ta.value="'+result+'";'
#print(txtcontent)
#browser.execute_script('var ta = document.getElementsByTagName("textarea")[0];ta.value="--server.port=50339";')
browser.find_element_by_xpath('//*[@id="app"]/div[3]/div/div/div[3]/div[1]/div[2]/div[2]/div/div/div/div/div/div[2]/div/div/div[4]/textarea').send_keys(result)
browser.find_element_by_xpath('//*[@id="app"]/div[3]/div/div/div[3]/div[1]/div[2]/div[3]/div/button[1]').click()
browser.back()
else:
browser.back()
browser.close()
編寫程式碼時遇到的幾個問題:
- chrome瀏覽器無法全屏,browser.maximize_window()不起作用,需要找到與瀏覽器對應的chromedriver對應版本
- textarea內容的填入與獲取,需要結合js和selenium同時進行比較好,解決方案具體看程式碼
- 迴圈處理元素點選事件時如果有時可以有時只能獲取一個元素,說明瀏覽器元素尚未載入完畢就被selenium獲取進而只能拿到1-2個元素進行迴圈,所以需要使用wait.until()或者多睡幾秒,等元素載入完全
selenium最大的缺點就是效率太低,平時用來做個測試還行,真要大規模採集資料需要另尋出路,當然還要處理反爬等技術
相關文章
- Selenium 自動化最佳實踐技巧 (中)
- 基於Apache Zookeeper手寫實現動態配置中心(純程式碼實踐)Apache
- Selenium自動化實現web自動化-1Web
- Docker+LNMP+Jenkins+ 碼雲實現 PHP 程式碼自動化部署DockerLNMPJenkinsPHP
- 用python實現selenium 自動化測試Python
- python3 selenium web自動化測試之excel引數化PythonWebExcel
- 自動化實踐篇丨教你逐步解析Selenium常用API介面API
- 自動化測試selenium在小公司的成功實踐
- python selenium +autoit實現檔案上傳 --實踐Python
- Selenium:xPath 定位實踐
- dart系列之:dart程式碼最佳實踐Dart
- 修改自動生成get/set方法模板程式碼
- 一鍵實現自動化部署(灰度釋出)實踐
- Jenkins + Gitee 實現程式碼自動化構建JenkinsGitee
- (上)python3 selenium3 從框架實現學習selenium讓你事半功倍Python框架
- 微信小程式功能之全屏滾動效果的實現程式碼微信小程式
- 最佳實踐之 Android程式碼規範Android
- 小程式頁面動態配置實現
- JNI程式碼實踐
- Selenium3與Python3實戰Web自動化測試框架【日記1】PythonWeb框架
- Selenium IDE實踐(使用Selenium錄製)IDE
- 【微信小程式】掃碼付小程式優化實踐微信小程式優化
- 【程式碼視覺化實踐】程式碼變更影響分析視覺化
- 使用Selenium+POI實現Excel自動化批量查單詞Excel
- 小程式優化實踐優化
- 騰訊雲Kafka海量服務自動化運營實踐Kafka
- 幾道JS程式碼手寫題以及一些程式碼實現JS
- 美團掃碼付小程式的優化實踐優化
- 微信小程式元件化(下):程式碼實現微信小程式元件化
- 華納雲:如何實現tomcat自動化部署Tomcat
- 異常值檢測!最佳統計方法實踐(程式碼實現)!⛵
- gulp 前端自動化實踐前端
- Selenium 自動化測試從零實戰
- 容器雲平臺物理叢集配置實踐
- python3程式碼中函式切割列表怎麼實現?Python函式
- YonBuilder低程式碼開發實踐:4行程式碼實現跨實體列表資料同步UI行程
- 雲原生推動全雲開發與實踐
- 上雲實踐操作(漫步雲端)之上雲動力