Python - Selenium: как щелкнуть элемент с текстом «Год» на веб-странице - PullRequest
0 голосов
/ 03 июля 2018
from bs4 import BeautifulSoup as soup
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font
from selenium import webdriver
from selenium.webdriver.common.by import By
import datetime
import os
import time
import re

browser = webdriver.Chrome(executable_path=r"C:\Program Files(x86)\Google\Chrome\Application\chromedriver.exe")
my_url = 'https://www.eex.com/en/market-data/power/futures/phelix-at-futures#!/2017/07/24'
browser.get(my_url)
button = browser.find_elements_by_class_name('ng-scope')[-1]
browser.execute_script("arguments[0].click();", button)

Это не дает мне никакой ошибки, но фактически не щелкает. Оно должно меняться от месяца к году, поскольку это последний элемент, но он остается там.

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

В соответствии с url , который вы предоставили, чтобы щелкнуть элемент с текстом как Year , вы должны заставить WebDriverWait , чтобы элемент был кликабельно следующим образом:

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.tabs.filter_wrap.clearfix li.ng-scope:nth-child(3)>a"))).click()
    
  • XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='tabs filter_wrap clearfix']//li[@class='ng-scope']/a[contains(.,'Year')]"))).click()
    
0 голосов
/ 03 июля 2018

Вы можете очистить одно и то же яблоко по-разному. Однако в этом случае лучше использовать .find_element_by_link_text(), который с меньшей вероятностью сломается. Дайте ему шанс:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.eex.com/en/market-data/power/futures/phelix-at-futures#!/2017/07/24'

driver = webdriver.Chrome()
driver.get(url)
wait = WebDriverWait(driver, 30)

wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Year"))).click()
driver.quit()
0 голосов
/ 03 июля 2018

Попробуйте это:

from bs4 import BeautifulSoup as soup
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font
from selenium import webdriver
from selenium.webdriver.common.by import By
import datetime
import os
import time
import re

browser = webdriver.Chrome(executable_path=r"C:\Program Files(x86)\Google\Chrome\Application\chromedriver.exe")
my_url = 'https://www.eex.com/en/market-data/power/futures/phelix-at-futures#!/2017/07/24'
browser.get(my_url)
# wait until button will be present
WebDriverWait(driver, 120).until(EC.presence_of_element_located((By.XPATH, "//*[@id='content']/div/div/ul/li[3]/a")))
# find the button and click on it
button = driver.find_element_by_xpath("//*[@id='content']/div/div/ul/li[3]/a")
button.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...