파이썬에서 셀레늄을 사용하여 루프를 수행하는 것과 관련된 몇 가지 질문이 있습니다. 사실, 나는 'driver.find_elements_by_id'에 의해 추적되는 링크 목록을 반복하고 하나씩 클릭하고 싶지만 문제는 링크 (코드의 '링크 목록')를 클릭 할 때마다 페이지 새로 고침되어 있으므로 '메시지 : 요소 참조가 부실임을 나타내는 오류 메시지가 표시됩니다. 요소가 더 이상 DOM에 연결되어 있지 않거나 페이지가 새로 고쳐집니다. '셀레늄 루프 페이지가 파이썬에서 새로 고침
그 이유는 클릭 후 링크 목록이 사라 졌기 때문입니다. 하지만 어떻게 페이지가 더 이상 존재하지 않더라도 셀레늄에서 일반적으로 목록을 반복 할 수 있습니다. 나는 'driver.back()'을 사용했으며 분명히 작동하지 않습니다.
는오류 메시지는 코드에서이 줄 끝에서 팝업 :
link.click()
linklist이 URL (필자는 새로 페이지 후 버튼 문서에 땡그랑 소리 다음 첫 번째 파일을 다운로드 할에 있습니다
누군가이 문제를 조사 할 수 있습니까? 감사합니다.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest
import os
import time
from bs4 import BeautifulSoup
from selenium.webdriver.common.keys import Keys
import requests
import html2text
class LoginTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.driver.get("https://www.sec.gov/edgar/searchedgar/companysearch.html")
def test_Login(self):
driver=self.driver
cikID="cik"
searchButtonID="cik_find"
typeID="//*[@id='type']"
priorID="prior_to"
cik="00001467373"
Type="10-K"
prior="201"
search2button="//*[@id='contentDiv']/div[2]/form/table/tbody/tr/td[6]/input[1]"
documentsbuttonid="documentsbutton"
formbuttonxpath='//a[text()="d10k.htm"]'
cikElement=WebDriverWait(driver,30).until(lambda driver:driver.find_element_by_id(cikID))
cikElement.clear()
cikElement.send_keys(cik)
searchButtonElement=WebDriverWait(driver,20).until(lambda driver:driver.find_element_by_id(searchButtonID))
searchButtonElement.click()
typeElement=WebDriverWait(driver,30).until(lambda driver:driver.find_element_by_xpath(typeID))
typeElement.clear()
typeElement.send_keys(Type)
priorElement=WebDriverWait(driver,30).until(lambda driver:driver.find_element_by_id(priorID))
priorElement.clear()
priorElement.send_keys(prior)
search2Element=WebDriverWait(driver,30).until(lambda driver:driver.find_element_by_xpath(search2button))
search2Element.send_keys(Keys.SPACE)
time.sleep(1)
documentsButtonElement=WebDriverWait(driver,20).until(lambda driver:driver.find_element_by_id(documentsbuttonid))
a=driver.current_url
window_be1 = driver.window_handles[0]
linklist=driver.find_elements_by_id(documentsbuttonid)
with open("D:/doc2/"+"a"+".txt", mode="w",errors="ignore") as newfile:
for link in linklist:
link.click()
formElement=WebDriverWait(driver,30).until(lambda driver:driver.find_element_by_xpath(formbuttonxpath))
formElement.click()
time.sleep(1)
t=driver.current_url
r = requests.get(t)
data = r.text
newfile.write(html2text.html2text(data))
drive.back()
drive.back()
def terdown(self):
self.driver.quit()
if __name__=='__main__':
unittest.main()
하지 사용해야 할 수도 있습니다
을 그리고 당신은 링크의 목록을 반복 할 수 있습니다 :이 같은 것을보십시오 이것이 문제라면,'driver.back()'대신'for' 루프에서'drive.back()'을 사용하고 있습니다. –