关于csv:如何使用python selenium单击和下载

How to click and download with python selenium

我尝试通过Selenium(python)从谷歌趋势下载csv数据。

在前面,我尝试打印源页面并提取以后需要的数据。它工作了一段时间,但现在不工作了。

我试着点击下载按钮获取csv文件,但什么也没发生。你对这个案子有什么想法吗?

  • 我从Firebug+FirePath(火狐插件)获得了按钮路径。

    HTML/BODY/DIV[2]/DIV[2]/DIV/MD content/DIV/DIV/DIV/DIV[1]/Trends widget/ng include/widget/DIV/DIV/DIV/widget actions/DIV/button[1]

  • 我尝试使用Chrome驱动程序和Firefox驱动程序。

  • 这段代码;放置1个(字)参数,以获得搜索趋势。

    导入系统导入时间

    来自Selenium导入WebDriver从Selenium.WebDriver.common.keys导入密钥来自selenium.webdriver.common.actionu chains导入actionschains从Selenium.webDriver.support.ui导入选择从Selenium.webDriver.support.ui导入webDriverWait来自selenium.webdriver.common.by import by来自selenium.webdriver.support导入预期的欧盟条件

    def run_text_extract(搜索单词):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
            try:
                         print(search_word)


                         driver = webdriver.Firefox('/home/noah/Desktop/Google_Trend_downloader/chromedriver/geckodriver')
             #            driver = webdriver.Chrome('/home/noah/Desktop/Google_Trend_downloader/chromedriver')

                         driver.get("https://trends.google.com/trends/explore?date=all&geo=TH&q="+search_word)
                         driver.find_element_by_xpath('html/body/div[2]/div[2]/div/md-content/div/div/div[1]/trends-widget/ng-include/widget/div/div/div/widget-actions/div/button[1]').click()



                         try:

                              driver.manage().deleteAllCookies()
                              clear_cache(driver)

                         except TimeoutException as ex:
                                isrunning = 0
                                print("Exception has been thrown." + str(ex))
                                print("Timeout line is", line ,".")
                                driver.close()

                         except Exception:
                                print ("Here 5")
                                pass

                         time.sleep(2)
                         driver.close()
                         print("======== END_OF_FILE ===============")


            except:
                   pass

    如果name='main':运行文本提取(sys.argv[1])睡眠时间(8)#运行文本提取()。


我已导航到您提供的链接。如果您搜索任何术语,您可以看到下载csv按钮链接将出现在右侧。但是将有3个具有相同类或CSS选择器的下载csv-button链接存在。所以您需要收集所有元素并循环使用它,以便您可以单击特定的元素。在您的例子中,我假设您想单击第一个元素。所以下面的代码应该有效。如果希望第二个或第三个元素单击相应更改索引。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def run_text_extract(search_word):
    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
    import time
    profile = webdriver.FirefoxProfile()
    profile.set_preference("browser.download.folderList", 2)
    profile.set_preference("browser.download.manager.showWhenStarting", False)
    profile.set_preference("browser.download.dir", 'C:\\Python27')
    profile.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")
    driver = webdriver.Firefox(firefox_profile=profile,executable_path=r'C:\\Python27\\geckodriver.exe')
    driver.get("https://trends.google.com/trends/explore?date=all&geo=TH&q="+ search_word)
    time.sleep(7)
    lst = driver.find_elements_by_css_selector(".widget-actions-item.export")
    lst[0].click()

run_text_extract("selenium")