seleniumを利用して自動的に教育品質評価を完成する
ツールの準備 selenium
chromedriver は を指定しなくてもよい.
基礎知識
seleniumは、ページ要素を多くの方法で位置決めすることができます.ここでは簡単に列挙します. idによる位置決め nameによる位置決め tag_を通過name位置決め classを通過name位置決め cssによる位置決め xpathによる位置決め
xpath単純構文
式#シキ#
概要
//div
すべてのdiv要素を選択
//div[@class=“blog-content-box”]
classをcblog-content-boxの要素として選択
//div/link/@href
すべてのdivラベルの下にあるlinkラベルのリンクを選択
//div/h2/text()
すべてのdivラベルの下のh 2ラベル間の内容を選択
//div[1]/p
最初のdivラベルの下のpラベルの内容を選択
//div[1]/p[last()]
最初のdivラベルの下のpラベルの最後の内容を選択します.
//div[@class^=“blog”]
blogで始まるdivラベルをすべて選択
etree.HTML(html).xpath(‘count(//div/form)’)
すべてのdivラベルの下のformラベルの数を計算します linkによる位置決め
例外処理
フレーム処理
frameは非常に大きな穴で、現在のページのframeに注意しないとseleniumで要素が位置決めされない可能性があります.
frame切替
私たちのコードが速すぎるかもしれませんが、現在のhtmlページが完全にロードされていないため、要素が位置決めされません. sleep遅延、絶対遅延 を利用隠性遅延 最長は30秒で、30秒以内にリソースがすべてロードされると、後続のコードが実行され、30秒以内にロードが完了せず、後続のコードも実行されます.顕性待ち 待ち時間は20秒、0.5秒間隔でターゲット要素のロードが完了したかどうかを問い合せ、20秒以内にロードが完了した後、後続のコードを実行し、最長20秒待ち、ロードがなくても実行を継続します.
ここで検索する要素はメタグループであることに注意してください.
alterポップアップ処理
無視
注意:各学校の公式サイトは異なり、自分で要素操作にナビゲートする必要があります.
まとめ
やはり直接jsで気持ちがいいですね.ハハハ、jsは強すぎます.
jsコード:copy竜兄
最後にhtmlを作って学籍番号とパスワードを入力して、postを通じてサーバーに送信して、最後に自動教育の品質の評価コードを呼び出して完成して、フレームワークを学んだことがなくて、コードの書くのはとても腐って、笑うことができません.
sudo pip3 install seletinum
https://chromedriver.chromium.org/downloads
/usr/local/bin
のディレクトリの下に置く、コードは位置基礎知識
seleniumは、ページ要素を多くの方法で位置決めすることができます.ここでは簡単に列挙します.
driver = webdrriver.Chrome()
driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_css_selector
driver.find_element_by_xpath
xpath単純構文
式#シキ#
概要
//div
すべてのdiv要素を選択
//div[@class=“blog-content-box”]
classをcblog-content-boxの要素として選択
//div/link/@href
すべてのdivラベルの下にあるlinkラベルのリンクを選択
//div/h2/text()
すべてのdivラベルの下のh 2ラベル間の内容を選択
//div[1]/p
最初のdivラベルの下のpラベルの内容を選択
//div[1]/p[last()]
最初のdivラベルの下のpラベルの最後の内容を選択します.
//div[@class^=“blog”]
blogで始まるdivラベルをすべて選択
etree.HTML(html).xpath(‘count(//div/form)’)
すべてのdivラベルの下のformラベルの数を計算します
driver.find_element_by_link_text()
リンク内のすべての要素を取得driver.find_element_by_partial_link_text()
リンク内の要素の一部を取得例外処理
フレーム処理
frameは非常に大きな穴で、現在のページのframeに注意しないとseleniumで要素が位置決めされない可能性があります.
frame切替
driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))
ちえんしょり私たちのコードが速すぎるかもしれませんが、現在のhtmlページが完全にロードされていないため、要素が位置決めされません.
time.sleep( )
driver.implicitly_wait( )
WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located( ))
ここで検索する要素はメタグループであることに注意してください.
alterポップアップ処理
driver.switch_to.alert.accept()
を受け入れる無視
driver.switch_to.alert.dismiss()
送信テキストdriver.switch_to.alert.send_keys( )
テキストコンテンツの取得driver.switch_to.alert.text
コード実装#! /usr/bin/python3.8
import requests
import sys
from selenium import webdriver
import time
from lxml import etree
class Table:
def __init__(self, number_id, passwd):
self.url = " "
self.number_id = number_id
self.passwd = passwd
def simulate(self):
#
driver = webdriver.Chrome()
#
driver.maximize_window()
#
driver.get(self.url)
#
driver.find_element_by_id("username").send_keys(self.number_id)
driver.find_element_by_id("password").send_keys(self.passwd)
driver.find_element_by_class_name("btn_dl").click()
time.sleep(1)
#
driver.find_element_by_id("157889684646655577").click()
#
windows = driver.window_handles
driver.switch_to.window(windows[-1])
time.sleep(1)
#
driver.find_element_by_xpath(
"/html/body/div[1]/div[1]/div[2]/ul/li[4]/a/span").click()
driver.find_element_by_xpath(
"/html/body/div[1]/div[1]/div[2]/ul/li[4]/ul/li[1]/a").click()
time.sleep(1)
# frame,
driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))
time.sleep(1)
#
html = etree.HTML(driver.page_source)
size = html.xpath(
'count(/html/body/form/div[3]/div/div[2]/div/div[1]/select/option)')
size = int(size)
# js
commond = "document.getElementById('{}').options[{}].selected = true;"
for j in range(size):
#
time.sleep(1)
html = etree.HTML(driver.page_source)
id_lists = html.xpath("//td/select/@id")
for i in id_lists:
#
if i == "DataGrid1_JS1_14" or i == "DataGrid1_JS2_14":
end = commond.format(i, 2)
else:
end = commond.format(i, 1)
driver.implicitly_wait(7)
# time.sleep(1)
driver.execute_script(end)
try:
time.sleep(2)
driver.find_element_by_name("Button1").click()
except Exception as e:
driver.refresh()
time.sleep(2)
driver.find_element_by_name("Button1").click()
else:
print("success")
time.sleep(1)
driver.switch_to.alert.accept()
time.sleep(1)
driver.find_element_by_name("Button2").click()
time.sleep(5)
driver.quit()
print("---end----")
def run(self):
print("---start----")
self.simulate()
if __name__ == "__main__":
if len(sys.argv) == 3:
number_id = sys.argv[1]
passwd = sys.argv[2]
else:
print("./ ")
sys.exit()
table = Table(number_id, passwd)
table.run()
注意:各学校の公式サイトは異なり、自分で要素操作にナビゲートする必要があります.
まとめ
やはり直接jsで気持ちがいいですね.ハハハ、jsは強すぎます.
jsコード:copy竜兄
setInterval(function(){
var select = document.getElementById("iframeautoheight").contentWindow.document.getElementsByTagName('select');
for (var j = 1; j < select.length; j++) {
if (j != select.length - 1) {
select[j].options[1].selected = true;
} else {
select[j].options[2].selected = true;
}
}
if(select.length>16){
select[10].options[2].selected = true;
}
setTimeout(function() {
var elements = document.getElementById("iframeautoheight").contentWindow.document.getElementsByTagName('input');
for (var i = 0; i < elements.length; i++) {
if(elements[i].value == " "){
elements[i].click();
}
}
}, 1000)
},5000);
setTimeout(function(){
var element = document.getElementById("iframeautoheight").contentWindow.document.getElementsByTagName('input');
for (var i = 0; i < element.length; i++) {
if(element[i].value == " "){
element[i].click();
}
}
},62000)
最後にhtmlを作って学籍番号とパスワードを入力して、postを通じてサーバーに送信して、最後に自動教育の品質の評価コードを呼び出して完成して、フレームワークを学んだことがなくて、コードの書くのはとても腐って、笑うことができません.