【问题标题】:Can I feed Python links from Excel to execute script on?我可以从 Excel 提供 Python 链接以执行脚本吗?
【发布时间】:2023-03-08 11:00:01
【问题描述】:

我的当前代码中有一个明确的 URL,告诉它导航到特定网站并运行其余命令。

有没有一种方法可以让我在 Excel 中编译大量这些链接,并让 Python 通过它们循环代码,以便每次运行都基于一个新链接?

这是使用显式粘贴的网站 URL 的代码的 sn-p:

driver.get("https://www.website.com")
driver.find_element_by_css_selector('[class="k-widget k-dropdown ic-can-be-dirty"]').click()

代码从那里开始。因为我想在我们网站上的许多链接上运行代码,所以我很想找到一种方法来通过 Excel 源或记事本文件或其他任何东西动态更改此链接。

根据建议更新代码:

with open(path_to_csv) as mycsv:
reader = csv.reader(mycsv)
for row in reader:
    urlstring = row[0]
    driver.get(urlstring)
    driver.find_element_by_css_selector('[class="k-widget k-dropdown ic-can-be-dirty"]').click()
    time.sleep(1)

解决方案

使用@Doodlevib 的建议,我设法在不使用Path 模块的情况下计算出代码:

with open(path_to_csv, 'r') as mycsv:
    reader = csv.reader(mycsv)
    for row in reader:
        urlstring = row[0]
        time.sleep(2)
        driver.get(urlstring)

我还必须添加“r”来指示读取文件的代码。我使用了一个单独的测试终端和print() 命令来确保上面的 sn-p 吐出了 CSV 的第一行。

最初我遇到的是编码问题,但在我看到我使用的 CSV 编码为 cp1252 后,我排除了这个问题。

【问题讨论】:

    标签: python excel selenium


    【解决方案1】:

    是的,您可以使用 Python 解析 .csv 或文本文件并使用解析后的字符串进行操作。

    如果您使用 .csv 文件执行此操作,该文件在第一列中只有一个 url 列表,则以下循环应该可以工作。为了与平台无关,下面的代码使用了pathlib 库,但请注意pathlib 不是必需的。您只需要确保open() 函数接收到为您的平台/操作系统正确格式化的路径字符串。需要注意的是,我不知道您的 driver 是什么,但这假设您要显式导入它。

    import csv
    from pathlib import Path
    import driver
    
    path_to_csv = Path("\Your\Path\To\CSV.csv")
    
    with open(path_to_csv) as mycsv:
        reader = csv.reader(mycsv)
        for row in reader:
            urlstring = row[0]
            driver.get(urlstring)
            driver.find_element_by_css_selector('[class="k-widget k-dropdown ic-can-be-dirty"]').click()
    

    如果您的 .csv 比单列字符串列表更复杂,您可以使用更高级的字符串解析,仅在包含 url 的文件行上运行所需的函数,或在某些行的 url 上运行/columns 但不是其他的,等等。

    还有其他方法可以做到这一点。你可以创建一个你读入的字符串的 Python 列表,然后用你想要的 driver 函数循环列表。

    如果您的 .csv 以异常格式编码,例如 CSV UTF-8 或完整的 Excel 文件,您需要在 open() 函数的参数中指定(有关 this post 的更多信息) .

    【讨论】:

    • 我真的很感激。如果我遇到任何问题,我会试一试并回复你,但这对我来说很有意义。
    • 我不确定我是否做错了。在 CSV 上,地址必须全部链接还是用引号括起来?此外,使用driver.get(urlstring) 我得到InvalidArgumentException。我不确定是什么原因造成的
    • 嗨@datoro,CSV file 不存储超链接信息,CSV 文件只是保存由文件的“分隔符”(通常是逗号,因此“逗号分隔-价值”)。所以 CSV 中的 url 不应该是超链接。您可能不希望它们用引号引起来;引号是 Python 创建字符串的简写。听起来您可能有一个 Excel 文件(不是 CSV),保存为 .xlsx 格式或其他格式,在这种情况下,可能需要以不同于 open() 的默认值的方式解析编码以避免错误。
    • 非常感谢您的帮助。今天早上在思考完代码的逻辑后,我回去找到了解决方案。我已经发布了适合我的代码的 sn-p。再次感谢您的帮助!
    • 没问题@datoro!我很高兴看到它有助于解决您的问题并且您能够在此过程中更多地了解 Python;一个好的调试练习有很长的路要走。感谢发布符合您预期目的的“最终产品”代码;这是一个非常好的做法,因为它对将来将您的问题用作资源的任何人都有帮助。
    猜你喜欢
    • 2015-06-29
    • 2012-01-13
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多