我正在嘗試在無(wú)頭模式下使用 selenium 從網(wǎng)站下載 excel 文件。雖然它在大多數(shù)情況下工作得很好,但在少數(shù)情況下(一年中的幾個(gè)月) driver.find_element_by_xpath() 無(wú)法按預(yù)期工作。我瀏覽了很多帖子,雖然當(dāng)驅(qū)動(dòng)程序正在尋找它時(shí)該元素可能沒(méi)有出現(xiàn),但情況并非如此,因?yàn)槲覐氐讬z查了它并且還嘗試使用 time.sleep() 來(lái)減慢進(jìn)程,在附注我還使用 driver.implicitly_wait() 使事情變得更容易,因?yàn)榫W(wǎng)站實(shí)際上需要一段時(shí)間才能在頁(yè)面上加載內(nèi)容。我無(wú)法使用請(qǐng)求,因?yàn)樗讷@取請(qǐng)求的響應(yīng)中不顯示任何數(shù)據(jù)。我的腳本如下:from selenium import webdriverimport datetimefrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.support.ui import Selectimport osimport shutilimport timeimport calendarcurrentdir = os.path.dirname(__file__)Initial_path = 'whateveritis'chrome_options = Options()chrome_options.add_argument('--headless')chrome_options.add_argument('--no-sandbox')chrome_options.add_argument('--disable-dev-shm-usage')chrome_options.add_experimental_option("prefs", { "download.default_directory": f"{Initial_path}","download.prompt_for_download": False,"download.directory_upgrade": True,"safebrowsing.enabled": True})def save_hist_data(year, months): def waitUntilDownloadCompleted(maxTime=1200): driver.execute_script("window.open()") # switch to new tab driver.switch_to.window(driver.window_handles[-1]) # navigate to chrome downloads driver.get('chrome://downloads') # define the endTime endTime = time.time() + maxTime while True: try: # get the download percentage downloadPercentage = driver.execute_script( "return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('#progress').value") # check if downloadPercentage is 100 (otherwise the script will keep waiting) if downloadPercentage == 100: # exit the method once it's completed return downloadPercentage except: pass
1 回答

猛跑小豬
TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
問(wèn)題在于 except :異常處理。根據(jù)您的代碼塊,如果元素未找到"//td[@class='scwCells' and contains(text(), '{no_of_days}')]"
。由于 3 月 31 日的課程是scwCellsWeekend
找不到元素。
按照第一個(gè)例外,它會(huì)處理一個(gè)
IdentationException
. 由于 element not found 不是 anIdentationException
,因此除了異常處理外,它將用于下一個(gè)。因?yàn)槌藳](méi)有提到第二個(gè)條件外,NoSuchElementException 是在里面處理的。根據(jù)此處給出的代碼,它正在嘗試使用 xpath 搜索和元素
//td[@class='scwInputDate' and contains(text(), '31')]
。結(jié)果您再次找不到 NoSuchElementException。
您可以使用邏輯運(yùn)算符或如下所示,而不是使用如此多的異常處理方案:
driver.find_element_by_xpath(f"//td[@class='scwCellsWeekend' and contains(text(), '{no_of_days}')] | //td[@class='scwCells' and contains(text(), '{no_of_days}')] | //td[@class='scwInputDate' and contains(text(), '{no_of_days}')]").click()
添加回答
舉報(bào)
0/150
提交
取消