【问题标题】:Python - Selenium: How to click on the element with text as "Year" within the webpagePython - Selenium:如何在网页中单击文本为“年份”的元素
【发布时间】:2018-12-11 11:14:54
【问题描述】:
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)

它没有给我任何错误,但实际上并没有点击。它应该逐月更改,因为它是最后一个元素,但它仍然存在。

【问题讨论】:

  • 你想点击哪个按钮?
  • 'Year' 按钮,使用 inspect 似乎是最后一个 'ng-scope' 元素

标签: python selenium selenium-webdriver xpath css-selectors


【解决方案1】:

根据您提供的 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()
    

【讨论】:

    【解决方案2】:

    试试这个:

    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()
    

    【讨论】:

      【解决方案3】:

      你可以用不同的方式剥同一个苹果。但是,在这种情况下,更好的方法是使用.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()
      

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多