【问题标题】:How to find and click on a button on a website with selenium? (Python 2.7 - Debian)如何找到并单击带有硒的网站上的按钮? (Python 2.7 - Debian)
【发布时间】:2018-03-09 21:35:18
【问题描述】:

我正在尝试单击一个按钮,以在网站上加载更多数据。 我之前和之后放了一个time.sleep代码部分当然要等一点时间,但还是不行。

此按钮的 html 代码如下所示:

<button data-mode="arrivals" data-page="-1" data-timestamp="1506584673.386" ng-click="loadMoreFlights($event)" data-current-page="1" data-loading-text="<i class=&quot;fa fa-circle-o-notch fa-spin&quot;></i> Loading earlier flights..." class="btn btn-table-action btn-flights-load">Load earlier flights</button>

我试过这个:

def scrape(urls):
    browser = webdriver.Firefox()
    datatable=[]
    for url in urls:
        browser.get(url)
        time.sleep(5)
        driver.find_element_by_xpath("//a[contains(.,'Load earlier flights')]")
        time.sleep(5)
        html = browser.page_source
        soup=BeautifulSoup(html,"html.parser")
        table = soup.find('table', { "class" : "table table-condensed table-hover data-table m-n-t-15" })
        soup2=BeautifulSoup(html,"html.parser")
        name = soup2.h2.string
        soup3=BeautifulSoup(html,"html.parser")
        name2 = soup3.h1.string
        soup4=BeautifulSoup(html,"html.parser")
        name3 = soup4.h3.string
        name4 = datetime.now()

        for record in table.find_all('tr', class_="hidden-xs hidden-sm ng-scope"):
            temp_data = []
            temp_data.append(name4)
            temp_data.append(name)
            temp_data.append(name2)    
            temp_data.append(name3)    
            for data in record.find_all("td"):
                temp_data.append(data.text.encode('latin-1'))
            newlist = filter(None, temp_data)
            datatable.append(newlist)

    time.sleep(10) 
    browser.close()
    return datatable 

为什么它不起作用?

编辑:

Selenium 版本是:3.5.0

火狐版本为:52.3.0

【问题讨论】:

  • 你遇到了什么异常
  • 这就是为什么我现在很沮丧,因为我没有收到任何错误,程序正在运行,但是这个点击事件不起作用
  • 请分享您要点击的网址和元素
  • 网址:flightradar24.com/data/airports/grz/arrivals;我要点击的元素/按钮:“加载早期航班”
  • @Mr.D 我在您的代码中没有看到任何点击。你忘记了吗?

标签: python selenium selenium-webdriver web-scraping


【解决方案1】:

我认为问题在于您的按钮的路径。应该是:

driver.find_element_by_xpath('//button[contains(text(), "Load earlier flights")]').click()

【讨论】:

  • 我也试过这段代码,结果一样。运行没有错误代码,但什么也没发生:S
  • @Mr.D 你能给我没有点击按钮的确切网址吗?我试过flightradar24.com/data/airports/grz/arrivals,按钮被正确点击了。
  • @Mr.D 你的意思是你机器上的按钮被正确点击了吗?
  • 我正在使用一些链接(在网址中),如果您认为这是问题所在,我也可以展示这部分,但我认为它很好。我的第一个链接是:flightradar24.com/data/airports/ams/arrivals
  • 但在这里它不起作用。因为如果我点击它(我只想点击一次)我会得到更多数据(早期数据)。
【解决方案2】:

试试这段代码吧

      driver.find_element_by_xpath('//button[contains(@class,'btn btn-table-action btn-flights-load')][contains(text(),'Load earlier flights')]').click();

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 2020-12-07
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多