我正在嘗試使用 selenium 下載多個檔案。該腳本適用于下載一個檔案。但是在一個回圈中,第一次下載后,它再也找不到任何頁面元素了。
網址:https ://www.grants.gov/web/grants/search-grants.html
def runExtractor(self, url):
self.driver.get(url);
self.driver.maximize_window();
self.wait = WebDriverWait(self.driver, 30)
self.driver.switch_to.frame(self.driver.find_element_by_xpath("//iframe[@id='embeddedIframe']"))
df = pd.read_csv ('nofos.csv')
for index, row in df.iterrows():
try:
time.sleep(1)
self.search(row["oppnum"])
time.sleep(2)
searchGrants = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//li[@id='SearchGrants-tab']/a")));
searchGrants.click()
except Exception:
logging.error(traceback.format_exc())
self.driver.close();
代碼在這一行失敗:
searchGrants = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//li[@id='SearchGrants-tab']/a")));
這是錯誤:
錯誤:root:Traceback(最近一次呼叫):檔案“C:\Users\name\Documents\workspace\lab\scraper\extractor.py”,第 44 行,在 runExtractor searchGrants = self.wait.until(EC.element_to_be_clickable ((By.XPATH, "//li[@id='SearchGrants-tab']/a"))); 檔案“C:\Users\name\anaconda3\envs\selenium\lib\site-packages\selenium\webdriver\support\wait.py”,第 80 行,直到引發 TimeoutException(訊息、螢屏、堆疊跟蹤)selenium.common。例外。超時例外:訊息:
這是代碼的其余部分:
def search(self, name):
oppNum = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='oppNum']")));
oppNum.send_keys(name)
searchBtn = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='searchBtn']")));
searchBtn.click()
archived = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='archived']")));
archived.click()
closed = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='closed']")));
closed.click()
if (self.check_exists_by_xpath("//div[@id='searchResultsDiv']/table/tbody/tr[2]/td/a")):
selectResult = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@id='searchResultsDiv']/table/tbody/tr[2]/td/a")));
selectResult.click()
time.sleep(10)
relatedDocumentsTab = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//li[@id='relatedDocumentsTab']")));
relatedDocumentsTab.click()
if (self.check_exists_by_xpath("//div[@id='relatedDocumentsTable']/table/tbody/tr[3]/td[2]/a")):
relatedDocument = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@id='relatedDocumentsTable']/table/tbody/tr[3]/td[2]/a")));
relatedDocument.click()
count = 0
while not path.exists(self.download "\\" name ".pdf" or self.download "\\" name ".docx" or self.download "\\" name ".doc"):
if count > 3:
logging.info("File download might be missing for " name)
break
time.sleep(5)
count = 1
如何將流程回傳到頁面?所以我可以通過回傳搜索頁面來下載下一個檔案。
uj5u.com熱心網友回復:
我能夠通過在單擊搜索選項卡之前呼叫回傳默認內容函式來解決該問題,因為搜索結果區域位于 Iframe 內:
改變:
for index, row in df.iterrows():
try:
time.sleep(1)
self.search(row["oppnum"])
time.sleep(2)
searchGrants = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//li[@id='SearchGrants-tab']/a")));
searchGrants.click()
到:
for index, row in df.iterrows():
try:
time.sleep(1)
self.search(row["oppnum"])
self.driver.switch_to.default_content()
time.sleep(1)
searchGrants = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//li[@id='SearchGrants-tab']/a")));
searchGrants.click()
time.sleep(1)
self.driver.switch_to.frame(self.driver.find_element_by_xpath("//iframe[@id='embeddedIframe']"))
except Exception:
logging.error(traceback.format_exc())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417988.html
標籤:
上一篇:PytestHTML不顯示影像
