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 selenium3 從框架實現學習selenium讓你事半功倍Python框架
- 自動化實踐篇丨教你逐步解析Selenium常用API介面API
- 自動化測試selenium在小公司的成功實踐
- Selenium:xPath 定位實踐
- dart系列之:dart程式碼最佳實踐Dart
- Jenkins + Gitee 實現程式碼自動化構建JenkinsGitee
- Selenium3與Python3實戰Web自動化測試框架【日記1】PythonWeb框架
- 小程式頁面動態配置實現
- JNI程式碼實踐
- 一鍵實現自動化部署(灰度釋出)實踐
- 【程式碼視覺化實踐】程式碼變更影響分析視覺化
- 使用Selenium+POI實現Excel自動化批量查單詞Excel
- python3程式碼中函式切割列表怎麼實現?Python函式
- Selenium使用Cookie實現自動登入Cookie
- python+selenium實現自動搶票Python
- 微信小程式功能之全屏滾動效果的實現程式碼微信小程式
- 程式設計實戰篇——Spring Boot 自動配置實現程式設計Spring Boot
- 小程式優化實踐優化
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- 幾道JS程式碼手寫題以及一些程式碼實現JS
- 異常值檢測!最佳統計方法實踐(程式碼實現)!⛵
- 【微信小程式】掃碼付小程式優化實踐微信小程式優化
- Selenium實現元素定位
- YonBuilder低程式碼開發實踐:4行程式碼實現跨實體列表資料同步UI行程
- kubernetes實踐之五十六:雲原生
- vscode中配置eslint+vetur+prettier實現儲存時自動格式化並修復VSCodeEsLint
- Semgrep結合GitLab實現程式碼審計實踐-服務端Gitlab服務端
- 履約核心引擎低程式碼化原理與實踐
- 美團掃碼付小程式的優化實踐優化
- 最佳實踐 | 用騰訊雲AI人臉融合實現畢業照推廣活動小程式AI
- 資料結構 - 圖之程式碼實現資料結構
- Python3編碼如何實現檔案操作?Python
- 容器雲平臺物理叢集配置實踐