我正在使用Selenium進行一些自動化作業。對不起,我的描述太長了。我是Python的新手。 基本上有一個學生結果門戶。我們需要在那里輸入一個座位號并點擊確定按鈕來查看結果。點擊提交后,會打開一個新的視窗,用html表格顯示結果。
- 如果座位號是無效的,就會打開警報框,顯示無效的座位號和確定選項來關閉。
問題:
<問題:
- 我想回圈瀏覽從1500到1600的卷號。如果1501的卷號無效,就會顯示警報框。我想關閉警報框并繼續處理1502號卷。
如果結果的值超過96%,我想增加1個計數。 2. 一旦結果在計算后被打開,我想關閉新打開的視窗并再次輸入下一個座位號。
這是我的代碼:
這是我的代碼。
from selenium import webdriver
from selenium.common.exceptions import UnexpectedAlertPresentException
from selenium.webdriver.common.alert import Alert
import time
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'] )
web = webdriver.Chrome(options=選項,executable_path='J:stuffsoftchromedriver.exe'/span>)
web.get('https://msbte.org.in/DISRESLIVE2021CRSLDSEP/frmALYSUM21PBDisplay.aspx')
# 變數來存盤結果0
rlstart = 156857[/span
rlend = 157299[/span
try:
web.implicitly_wait(5)
pdl = web.current_window_handle
for x in range(rlstart, rlend)。
web.implicitly_wait(1)
inp = web.find_element_by_xpath('//*[@id="txtEnrollSeatNo"]'/span>)
inp.send_keys(x)
submit = web.find_element_by_xpath('//*[@id="btnSubmit"] ')
submit.click()
web.implicitly_wait(2)
web.implicitly_wait(2)
# pdl = web.current_window_handle[/span
handles = web.window_handles
for handle in handles。
if(handle != pdl)。
switch_to_alert().accept()
web.switch_to.window(handle)
getresult = web.find_element_by_css_selector('body > div > div:nth-child(3) > div:nth-child(4) > table > tbody > tr:nth-child(5) > td:nth-child(3) > strong').text
if(getresult > 96.00) 。
resultCount = 1
web.close()
web.switch_to.window(pdl)
web.implicitly_wait(2)
exceptUnexpectedAlertPresentException。
alert_obj = web.switch_to.alert
alert_obj.accept()
finally:
print("end"/span>)
web.quit()
print(resultCount)
這是錯誤的
uj5u.com熱心網友回復:
你可以把下面的代碼看一遍。
我沒有編輯你的代碼,但它能滿足你的要求。
while rlstart != rlend 1: , rlend 1因為如果有一個增量,156860變成156861,當rlstart是156861時,它走出while回圈,不給出156861的結果。
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path="path")
driver.maximum_window()
driver.implicitly_wait(10)
driver.get("https://msbte.org.in/DISRESLIVE2021CRSLDSEP/frmALYSUM21PBDisplay.aspx")
rlstart = 156857[/span]。
rlend = 156860 # Have tested only for a few Seat no.
#rlend = 157299
while rlstart != rlend 1:
try:
driver.find_element_by_id("txtEnrollSeatNo").send_keys(rlstart) # To send the Seat No.
driver.find_element_by_id("btnSubmit").click() # 要點擊提交按鈕和豁免發生在這之后。
# 收集所有打開的視窗.
handles = driver.window_handles
# 切換到其他視窗并提取座位號和百分比。
driver.switch_to.window(handles[1] )
time.sleep(1)
seatno = driver.find_element_by_xpath("/html/body/div/div[2]/table/tbody/tr[2]/td[6]").text
per = driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/table/tbody/tr[5]/td[3]/strong").text
print("Result of Seat no: {}".format(seatno)
print("百分比: {}".format(per))
# 由于百分比是十進制的,但卻是一個字串,將其轉換為浮點數更為準確。比較并遞增。
if float(per)>96.0。
rlend =1.
print("new rlend: {}".format(rlend))
# 關閉新視窗,切換回父視窗,并在輸入新Seat no.前清除。
driver.close()
driver.switch_to.window(handles[0] )
driver.find_element_by_id("txtEnrollSeatNo") .clear()
except:
print("Invalid Seat No : {}".format(rlstart) >)
# 處理警報,清除下一個座位號的欄位并繼續。因為沒有新的視窗打開,所以不需要在視窗之間切換。
driver.switch_to.alert.accept()
driver.find_element_by_id("txtEnrollSeatNo"/span>).clear()
通過。
rlstart = 1.
driver.quit()
輸出:
座位號的結果: 156857
百分比。95.71
座位號:156858的結果
百分比。96.63 96.63
新貸款。156861[/span
座位號的結果:156859
百分比。86.11
座位號:156860的結果
百分比。90.29
座位號:156861的結果
百分比。96.17[/span
新貸款。156862[/span
座位號的結果:156862
百分比。75.00
uj5u.com熱心網友回復:
你的代碼有幾個問題。
你的代碼有幾個問題。
你的代碼有幾個問題。
web.implicitly_wait(1)并沒有在你的代碼中插入實際的暫停。它只是設定了超時。等待元素出現在頁面上需要多少時間。所以當你定義它兩次時web.implicitly_wait(2)
web.implicitly_wait(2)
這并沒有給你一個4秒的暫停,只是定義了兩次2秒的超時,但沒有暫停你的程式流。 而且你不需要多次定義這個,只要定義一次就可以了。 另外,我們通常定義的超時時間是10-20-30秒,而不是1-2秒。這可能會導致在互聯網連接緩慢/網站回應緩慢等情況下的測驗失敗。
- 在座位號正確的情況下,沒有警報出現,但資料會在一個新視窗中打開。
因此,當座位正確時,
switch_to_alert().accept()將失敗 - 這就是實際發生的情況,因為沒有警報出現。 我正在努力制作一個正確的代碼,但其他人給了你作業代碼。所以你可以閱讀這里的解釋和那里的作業代碼:) 。
uj5u.com熱心網友回復:
需要注意的事項 :
time.sleep(),下面的代碼我把sleep只是為了視覺目的。
implicit與explicit混合使用。
rlend的值,為了測驗,你必須增加它,看看是否有效。
代碼 :-
web = webdriver.Chrome(driver_path)
web.maximize_window()
#web.implicitly_wait(50)/span>
web.get("https://msbte.org.in/DISRESLIVE2021CRSLDSEP/frmALYSUM21PBDisplay.aspx")
wait = WebDriverWait(web, 20)
resultCount = 0 0
rlstart = 156857[/span]。
rlend = 156861[/span]。
#157299[/span
try:
for x in range(rlstart, rlend)。
orginal_window = web.current_window_handle
seat_input_box = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[id='txtEnrollSeatNo']"))
time.sleep(1)
seat_input_box.clear()
seat_input_box.send_keys(rlstart)
rlstart = rlstart 1
submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id='btnSubmit']") )
提交.點擊()
try:
print("警報不存在,但新視窗存在")
handles = web.window_handles
web.switch_to.window(handles[1] )
time.sleep(1)
web.maximize_window()
time.sleep(2)
web.execute_script("window.rollTo(0, 300)")
time.sleep(2)
getresult = wait.until(EC.presence_of_element_located((By.XPATH, "//td[contains(text(),'aggregate Marks : ')]/following-sibling::td[2]/strong"/span>)).text
getresult_dec = float(getresult)
if getresult_dec > 96.00 :
resultCount = resultCount 1 。
print("Kill the browser in else block." )
web.close()
else。
web.close()
print("Kill the browser in else block." )
except:
print("意味著警報存在。")
a = web._switch_to.alert
a.accept()
web.switch_to.default_content()
time.sleep(3)
web.switch_to.window(orginal_window)
except:
pass。
print(resultCount)
匯入 :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/320028.html
標籤:

