PythonのSeleniumでループを実行することに関連するいくつかの質問があります。実際、私は 'driver.find_elements_by_id'で追跡されたリンクのリストを繰り返し、それらを一つずつクリックしたいのですが、問題は、リンク(コード内のリンクリスト)をクリックするたびに、がリフレッシュされ、 'メッセージ:要素の参照が古くなっていることを示すエラーメッセージが表示されます。要素がDOMに接続されていないか、ページがリフレッシュされています。セレンのループページをPythonでリフレッシュ
リンクのリストがクリック後に消えてしまったためです。しかし、どのように私は一般的にセレンでは、ページがもう存在しなくてもリストを繰り返すことができます。私は 'driver.back()'を使用して、明らかに動作しません。
エラーメッセージがコードでこの行の後にポップアップ表示:
link.click()
LINKLISTは(私はボタン文書にチャリンという音、その後リフレッシュページがある後、最初のファイルをダウンロードする場合は、このURLに位置しています表示される) 'https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001467373&type=10-K&dateb=201&owner=exclude&count=40'
誰かがこの問題を見ることができますか? ありがとうございました!
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()'を使用しています –