Python Selenium网页填写:从链接下载数据

时间:2017-10-11 13:21:10

标签: python selenium download autofill

我已编译此代码,以便从具有多个下载链接的网页执行下载迭代。单击下载链接后,该网页将生成一个必须填写并提交下载的webform。我试过在'try'&amp ;;中运行代码并面对问题'除了'块代码(错误:太宽泛的异常子句)并且最后有一个与'submit'相关的错误(错误:方法提交可能是静态的)这两个随后导致'SyntaxError:invalid syntax'。任何建议/帮助将不胜感激。谢谢。

import os
from selenium import webdriver

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-msdos-program")

driver = webdriver.Firefox(firefox_profile=fp)
driver.get('http://def.com/catalog/attribute')
#This is to find the download links in the webpage one by one
i=0
while i<1:
    try:
        driver.find_element_by_xpath('//*[@title="xml (Open in a new window)"]').click()
    except:
        i=1
#Once the download link is clicked this has to fill the form for submission which fill download the file

        class FormPage(object):
            def fill_form(self, data):
                driver.find_element_by_xpath('//input[@type = "radio" and @value = "Non-commercial"]').click()
                driver.find_element_by_xpath('//input[@type = "checkbox" and @value = "R&D"]').click()
                driver.find_element_by_xpath('//input[@name = "name_d"]').send_keys(data['name_d'])
                driver.find_element_by_xpath('//input[@name = "mail_d"]').send_keys(data['mail_d'])

                return self

            def submit(self):
                driver.find_element_by_xpath('//input[@value = "Submit"]').click()
                data = {
                    'name_d': 'abc',
                    'mail_d': 'xyz@gmail.com',
                }
                FormPage().fill_form(data).submit()
                driver.quit()

1 个答案:

答案 0 :(得分:0)

实际上你有两个警告和一个错误:

1 - &#34;太宽泛的例外&#34;这是一个警告,告诉你除了espefic错误,你应该除了所有错误。在你的&#34;除了&#34; line应该是except [TheExceptionYouAreTreating]:,例如except ValueError:。但是,这不应该阻止您的代码运行

2 - &#34;错误:方法提交可能是静态的&#34;这是警告,告诉您方法submit是一种静态方法(贝司是一种不使用self属性的方法)来抑制此警告,您可以使用装饰器{{1}像这样

@staticmethod

3 - &#34;语法错误:语法无效&#34;这就是阻止代码运行的原因。这是一个错误,告诉您代码中出现了错误。我想这可能是你班上的缩进。试试这个:

@staticmethod
def submit():
    ...

还有一件事。这些都是非常简单的错误和警告,您应该能够通过仔细阅读错误所说的内容来自行修复它们。我还建议您阅读Exceptions