以下の黄色と緑色で強調表示された次のページに移動する簡単なスクリプトがあります。CSSの要素のページカウンタ
私の質問は、ページカウンタを作成するためにどのようにして仕事がどこにあるのか分かりますか?
理想的には、それは読んでいました:
Page 5
Page 4 #For each of the loop
を私は次の問題を抱えていても、次は、動作する傾向がある:
elements = [x.get_text("*") for x in
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'(//div[div/div/text()="Main Lists"]//div[starts-with(@class, "sm-CouponLink_Label") and normalize-space()]')))]
全コード:
import collections
from random import shuffle
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
driver = webdriver.Chrome()
driver.set_window_size(1024, 600)
driver.maximize_window()
driver.get('https://www.bet365.com.au/#/AS/B1/')
driver.get('https://www.bet365.com.au/#/AS/B1/')
def page_counter():
for x in range(1000):
yield x
clickMe = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'(//div[div/div/text()="Main Lists"]//div[starts-with(@class, "sm-CouponLink_Label") and normalize-space()])')))
options = driver.find_elements_by_xpath('//div[div/div/text()="Main Lists"]//div[starts-with(@class, "sm-CouponLink_Label") and normalize-space()]')
indexes = [index for index in range(len(options))]
shuffle(indexes)
for index in indexes:
count = page_counter()
driver.get('https://www.bet365.com.au/#/AS/B1/')
elements = [x.get_text("*") for x in
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'(//div[div/div/text()="Main Lists"]//div[starts-with(@class, "sm-CouponLink_Label") and normalize-space()]')))]
#elements = [x.get_attribute("href") for x in
# driver.find_elements_by_xpath('//div[div/div/text()="Main Lists"]//div[starts-with(@class, "sm-CouponLink_Label") and normalize-space()]')))]
clickMe.click()
shuffle(elements)
links = dict((next(count) + 1, e) for e in elements)
desc_links = collections.OrderedDict(sorted(links.items(), reverse=True))
for key, value in desc_links.items():
try:
driver.get(value)
print('Page ' + str(key))
except TimeoutException as ex:
pass
エラー:
line 36, in <module>
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'(//div[div/div/text()="Main Lists"]//div[starts-with(@class, "sm-CouponLink_Label") and normalize-space()]')))]
File "C:\Users\Django\AppData\Local\Continuum\miniconda3\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
'待機(ドライバ、10)とtime.sleepを置き換える、始めるのに役立ちます場合
を参照してください。 element_to_be_clickable(locator)) 'あなたに返すつもりでないWebElementは、反復可能ではありません。 'wait(driver、10).until(EC.visibility_of_all_elements_located(locator))'を試してください。また、get_text()関数の定義を追加してください。 – Andersson
@Anderssonこの場合、get_textはどのように見えますか、CSSを追加すると同じエラーが発生します –
'get_text()'について私に尋ねますか?私はどのように見えるかわからない - あなたのコード、あなたの関数:) * ...私がCSSを追加すると... *何に追加?問題を詳細に記述し、正確なエラーログを提供してください – Andersson