Python:无法在网页中使用selenium下载

2023-11-26

我的目的是从下载一个 zip 文件这是这个网页中的一个链接https://www.shareinvestor.com/prices/price_download.html#/?type=price_download_all_stocks_bursa。然后保存到这个目录下"/home/vinvin/shKLSE/(我正在使用 pythonaywhere)。然后将其解压并将 csv 文件解压到目录中。

代码运行到最后没有错误,但没有下载。 压缩文件是自动地点击时下载手动。

使用我的带有有效用户名和密码的代码。这真实的用户名和密码使用是为了更容易理解问题。

    #!/usr/bin/python
    print "hello from python 2"

    import urllib2
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    from pyvirtualdisplay import Display
    import requests, zipfile, os    

    display = Display(visible=0, size=(800, 600))
    display.start()

    profile = webdriver.FirefoxProfile()
    profile.set_preference('browser.download.folderList', 2)
    profile.set_preference('browser.download.manager.showWhenStarting', False)
    profile.set_preference('browser.download.dir', "/home/vinvin/shKLSE/")
    profile.set_preference('browser.helperApps.neverAsk.saveToDisk', '/zip')

    for retry in range(5):
        try:
            browser = webdriver.Firefox(profile)
            print "firefox"
            break
        except:
            time.sleep(3)
    time.sleep(1)

    browser.get("https://www.shareinvestor.com/my")
    time.sleep(10)
    login_main = browser.find_element_by_xpath("//*[@href='/user/login.html']").click()
    print browser.current_url
    username = browser.find_element_by_id("sic_login_header_username")
    password = browser.find_element_by_id("sic_login_header_password")
    print "find id done"
    username.send_keys("bkcollection")
    password.send_keys("123456")
    print "log in done"
    login_attempt = browser.find_element_by_xpath("//*[@type='submit']")
    login_attempt.submit()
    browser.get("https://www.shareinvestor.com/prices/price_download.html#/?type=price_download_all_stocks_bursa")
    print browser.current_url
    time.sleep(20)
    dl = browser.find_element_by_xpath("//*[@href='/prices/price_download_zip_file.zip?type=history_all&market=bursa']").click()
    time.sleep(30)

    browser.close()
    browser.quit()
    display.stop()

   zip_ref = zipfile.ZipFile(/home/vinvin/sh/KLSE, 'r')
   zip_ref.extractall(/home/vinvin/sh/KLSE)
   zip_ref.close()
   os.remove(zip_ref)

HTML 片段:

<li><a href="/prices/price_download_zip_file.zip?type=history_all&amp;market=bursa">All Historical Data</a> <span>About 220 MB</span></li>

请注意,当我复制代码片段时,会显示 &amp。它在查看源代码中是隐藏的,所以我猜它是用 JavaScript 编写的。

观察我发现

  1. 目录home/vinvin/shKLSE即使我运行代码没有错误,也不会创建

  2. 我尝试下载一个更小的 zip 文件,该文件可以在一秒钟内完成,但在等待 30 秒后仍然没有下载。dl = browser.find_element_by_xpath("//*[@href='/prices/price_download_zip_file.zip?type=history_daily&date=20170519&market=bursa']").click()

enter image description here


我没有看到您的代码块有任何重大缺点。但以下是通过此解决方案和此自动化测试脚本的执行的一些建议:

  1. 该代码在场外交易时间内完美运行。在市场交易时间内,很多JavaScript & Ajax Calls正在发挥作用并处理这些问题超出了本问题的范围。
  2. 您可以考虑首先检查预期的下载目录,如果不可用,则创建一个新目录。此功能的代码块采用 Windows 风格,并且在 Windows 平台上完美运行。
  3. 一旦您点击“登录”,就会出现一些wait以便 HTML DOM 正确呈现。
  4. 当您想结束下载过程时,您需要在FirefoxProfile正如我下面的代码中提到的。
  5. 始终考虑通过最大化浏览器窗口browser.maximize_window()
  6. 当您开始下载时,您需要等待足够的时间才能完全下载文件。
  7. 如果您正在使用browser.quit()最后你不需要使用browser.close()
  8. 您可以考虑更换所有time.sleep()与任一ImplicitlyWait or ExplicitWait or FluentWait.
  9. 这是您自己的代码块,其中进行了一些简单的调整:

    #!/usr/bin/python
    print "hello from python 2"
    
    import urllib2
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    from pyvirtualdisplay import Display
    import requests, zipfile, os    
    
    display = Display(visible=0, size=(800, 600))
    display.start()
    
    newpath = 'C:\\home\\vivvin\\shKLSE'
    if not os.path.exists(newpath):
        os.makedirs(newpath)    
    
    profile = webdriver.FirefoxProfile()
    profile.set_preference("browser.download.dir",newpath);
    profile.set_preference("browser.download.folderList",2);
    profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/zip");
    profile.set_preference("browser.download.manager.showWhenStarting",False);
    profile.set_preference("browser.helperApps.neverAsk.openFile","application/zip");
    profile.set_preference("browser.helperApps.alwaysAsk.force", False);
    profile.set_preference("browser.download.manager.useWindow", False);
    profile.set_preference("browser.download.manager.focusWhenStarting", False);
    profile.set_preference("browser.helperApps.neverAsk.openFile", "");
    profile.set_preference("browser.download.manager.alertOnEXEOpen", False);
    profile.set_preference("browser.download.manager.showAlertOnComplete", False);
    profile.set_preference("browser.download.manager.closeWhenDone", True);
    profile.set_preference("pdfjs.disabled", True);
    
    for retry in range(5):
        try:
            browser = webdriver.Firefox(profile)
            print "firefox"
            break
        except:
            time.sleep(3)
    time.sleep(1)
    
    browser.maximize_window()
    browser.get("https://www.shareinvestor.com/my")
    time.sleep(10)
    login_main = browser.find_element_by_xpath("//*[@href='/user/login.html']").click()
    time.sleep(10)
    print browser.current_url
    username = browser.find_element_by_id("sic_login_header_username")
    password = browser.find_element_by_id("sic_login_header_password")
    print "find id done"
    username.send_keys("bkcollection")
    password.send_keys("123456")
    print "log in done"
    login_attempt = browser.find_element_by_xpath("//*[@type='submit']")
    login_attempt.submit()
    browser.get("https://www.shareinvestor.com/prices/price_download.html#/?type=price_download_all_stocks_bursa")
    print browser.current_url
    time.sleep(20)
    dl = browser.find_element_by_xpath("//*[@href='/prices/price_download_zip_file.zip?type=history_all&market=bursa']").click()
    time.sleep(900)
    
    browser.close()
    browser.quit()
    display.stop()
    
    zip_ref = zipfile.ZipFile(/home/vinvin/sh/KLSE, 'r')
    zip_ref.extractall(/home/vinvin/sh/KLSE)
    zip_ref.close()
    os.remove(zip_ref)
    

如果这能回答您的问题,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:无法在网页中使用selenium下载 的相关文章

  • 从网站上抓取数字和详细信息的数据

    我想从网站上抓取联系电话以及快递服务的相应详细信息 我无法从所有快递服务中获取联系电话和其他详细信息 例如姓名地址和评级 我分析的数据位于脚本标签中 请提出修复此问题的建议 import requests import pandas as
  • Relay 中的嵌套片段数据始终相同

    我是 Relay 新手 并且遇到了片段上嵌套数据的问题 当我在 graphiql 中进行测试时 以下查询返回正确的数据 因此我确信我的架构是正确的 viewer customers name billing address city 但是
  • 模拟类:Mock() 还是 patch()?

    我在用mock http www voidspace org uk python mock index html使用Python 想知道这两种方法中哪一种更好 阅读 更Pythonic 方法一 只需创建一个模拟对象并使用它 代码如下 def
  • 如何打印和显示子进程 stdout 和 stderr 输出而不失真?

    也许有人可以帮助我解决这个问题 我在 SO 上看到了许多与此类似的问题 但没有一个问题同时处理标准输出和标准错误 也没有处理像我这样的情况 因此出现了这个新问题 我有一个 python 函数 它打开一个子进程 等待它完成 然后输出返回代码以
  • Python itertools groupby 中令人不安的奇怪行为/错误?

    我在用itertools groupby解析一个短的制表符分隔的文本文件 文本文件有几列 我想做的就是对具有特定值的所有条目进行分组x在特定的列中 下面的代码对名为的列执行此操作name2 寻找变量中的值x 我尝试使用以下方法来做到这一点c
  • 如何检查jquery数据表中的每个复选框?

    我有一个第一列带有复选框的表格 我使用 jQuery DataTable 插件显示我的表格 我制作了 2 个链接来选择 取消选择每个复选框 这是选择全部的一个 a href Select all a 和 JavaScript functio
  • pandas-更改重采样时间序列的开始和结束日期

    我有一个时间序列 我将其重新采样到这个数据框中df 我的数据是从6月6日到6月28日 它希望将数据从6月1日延长到6月30日 计数列仅在较长时间内具有 0 值 而我的实际值是从 6 日到 28 日 Out 123 count Timesta
  • 如何连接多个字符串? [复制]

    这个问题在这里已经有答案了 如何将 stringList 中的所有字符串合并为一个而不打印它 例如 s joinStrings very hot day returns string print s Veryhotday 感觉有点倒退 但是
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • chrome 扩展 - 将数据从后台传递到自定义 html 页面

    创建浏览器扩展 我必须从 background js 打开新选项卡并将 JSON 数据传递到这个新选项卡 在新选项卡中 我使用传递的 JSON 数据来操作 渲染 DOM 下面是我的 background js 的一部分 我在其中使用自定义
  • 优化正则表达式以过滤数千个 HTML 选择选项

    背景 我开发了一个基于 jQuery 的穿梭小部件 https stackoverflow com a 13557000 59087对于 HTMLselect元素 因为我找不到一个经过最低限度编码并提供正则表达式过滤器来补偿的元素变音符号
  • 单击react.js 切换列表的背景颜色

    我正在尝试创建一个具有以下功能的列表 悬停时更改列表项的背景颜色 单击时更改列表项的背景颜色 在单击的元素之间切换背景颜色 即列表中只有一个元素可以具有 clicked 属性 我已经执行了 onhover 1 和 2 功能 但无法实现第三个
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • Javascript - 如何计算数字的平方?

    使用 JavaScript 函数 function squareIt number return number number 当给定数字 4294967296 时 函数返回 18446744073709552000 每个人都知道真正的答案是
  • 在 中动态添加链接样式表 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何将链接
  • Python 中的颜色处理

    对于我的聚类 GUI 我目前对聚类使用随机颜色 因为我事先不知道最终会得到多少个聚类 在 Python 中 这看起来像 import random def randomColor return random random random ra
  • nvd3.js - 无法更改折线图中线条的颜色

    我正在尝试更改 nvd3 折线图不同线条的颜色here http nvd3 org livecode index html codemirrorNav但我无法理解该怎么做 我想将示例中的 2 条线的颜色更改为绿色和青色 我试过 nv add
  • 在 Python 中伪造一个对象是否是类的实例

    假设我有一堂课FakePerson它模仿基类的所有属性和功能RealPerson 不扩展它 在Python 3中 是否可以伪造isinstance 为了认识到FakePerson as a RealPerson只通过修改对象FakePers
  • 地址更改时如何停止 Angular 重新加载

    我正在使用 Angular 的scrollTo and anchorScroll像这样 app controller TestCtrl function scope location anchorScroll scope scrollTo
  • Javascript / jQuery - 转换特殊 html 字符

    我有一个pre元素中包含一些 html 代码 该代码中有特殊字符 例如 lt 所以它不会破坏页面 然后我有一个 javascript 函数 它获取此 pre 元素的内容 突出显示它 使用 codemirror 并用突出显示的文本替换元素内容

随机推荐

  • 在 C# 中获取下载文件夹? [复制]

    这个问题在这里已经有答案了 我编写了一些代码来搜索目录并在列表框中显示文件 DirectoryInfo dinfo2 new DirectoryInfo C Users Hunter Downloads FileInfo Files2 di
  • ld:找不到框架 Flutter

    当我在 iOS 模拟器上构建 iOS 的 flutter 项目时 出现错误 ld framework not found Flutter 并且构建失败 这是当我尝试从 xcode 构建 flutter 项目时出现的错误消息 export I
  • ASP.NET MVC 2 - HTML.EditorFor() 和自定义编辑器模板

    随着 MVC 2 添加 HtmlHelper EditorFor 不可能为给定的 Model 对象创建强类型的 Display 和 Editor 模板 在摆弄它之后 我有点困惑如何将额外的 Model 数据传递到编辑器而不丢失编辑器控件的强
  • HTML5 数据列表值与内部文本

    我遇到了 Chrome 和 Firefox 对 HTML5 datalist 元素的处理之间出现的问题 我可能滥用了它 Firefox 正在按照我期望的方式处理它 但 Chrome 却不是 我还没有在 Opera 上尝试过 这是针对内部页面
  • 使用 FILTER_VALIDATE_REGEXP 的 filter_var

    我正在练习我的 PHP 初学者技能 想知道为什么这个脚本总是返回 FALSE 我究竟做错了什么 namefields a zA Z s value john if filter var value FILTER VALIDATE REGEX
  • 打印n层调用堆栈?

    在 Visual Studio 中使用 C 我想知道是否有一个 API 可以为我打印调用堆栈 最好 我想打印 5 层深度的调用堆栈 Windows 是否提供了一个简单的 API 来允许我执行此操作 看起来 Microsoft 的 DbgHe
  • Xcode 7:链接器命令再次失败,退出代码为 1(使用 -v 查看调用)

    我在 Xcode 7 的 iOS 模拟器上测试我的应用程序 但当我尝试在我的 iOS 设备 带有 iOS 9 的 iPhone 5S 中测试时 我今天 09 16 2015 更新了 xcode 7 和 iOS9 在此之前使用 iOS 8 4
  • 如何从主机外部(同一网络)连接到 docker 容器 [OSX 10.11]

    设置 计算机 A 这是 Docker 机器 默认 运行的地方 虚拟盒子 default 正在运行一个名为 Odoo 的容器 默认 是使用创建的Docker的安装过程 奥杜 是 创建使用Odoo的安装过程 计算机 B 这是同一局域网 LAN
  • 修改 CDO.Message 对象中附件的内容类型

    当我尝试使用 VBScript 将 MHTML 文件作为电子邮件附件添加到电子邮件中时 ContentMediaType被错误地设置为 message rfc822 RFC 822 据我了解 根据 Microsoft 的说法这是正确的 但根
  • 如何显示 NSDocument 目录中的所有图像

    首先 我从照片库中选择图像到 ALAsset 库 然后将图像存储在 ALAsset 库路径的文档目录中 我正在使用此代码将图像存储在 ALAsset 库的文档目录中 它工作完美 现在我想在表视图中显示存储在文档目录中的所有图像 我该怎么做
  • Python 从 tar.gz 导入库?

    我正在开发一个没有 root 访问权限的盒子 但是 有一个文件夹 share 可供每个人读取和写入 我想找到一种方法来放置 python 库 以便每个人都可以访问和使用它们 我发现我可以将 Egg 文件放在 share pythonLib
  • Swift 中哪些值类型支持写时复制?

    我读到了关于 Swift 中数组的写时复制实现here 与标准库中的所有可变大小集合一样 数组使用写时复制优化 阵列的多个副本共享同一存储 直到您修改其中一个副本 当发生这种情况时 被修改的阵列将用其自身唯一拥有的副本替换其存储 然后就地修
  • Android 中的 Intent 与 Content Provider

    我是android应用程序开发的新手 在研究基本的android组件时 我对意图和内容提供者感到困惑 因为两者都被用来将数据从一个应用程序 组件发送到另一个应用程序 组件 如果有意图 我们可以使用捆绑或附加功能发送数据 那么为什么我们要使用
  • 10 月 15 日 Windows 更新后 MVC 应用程序中断

    今天早上我醒来发现我的服务器上的 MVC 4 Web 应用程序已损坏 错误信息是 An exception of type System IO FileNotFoundException occurred in mscorlib dll b
  • 错误:mime-types-data 需要 Ruby 版本 >= 2.0

    我最近在 vmware fusion 中安装了干净的 ubuntu 14 04 虚拟机并更新了它 我正在尝试通过安装 mime tyes data sudo gem install mime types data v 3 2015 1120
  • 带 H:MM:SS 的精密计时器

    如何用 H MM SS 显示天文计时器 我读到默认显示 MM SS 和 H MM SS 我只找到了 MM SS 这是我的 MM SS 代码 带有开始和停止按钮 public class MainActivity extends AppCom
  • Docker-compose:应用程序容器无法连接到 Postgres

    使用 docker compose 我尝试从以下位置查看 Flask 应用程序manage py runserver与 postgres 图像连接 但出现以下错误 sqlalchemy exc OperationalError psycop
  • UserHostAddress 给出错误的 IP

    我收集了用户访问我的网站的 IP 地址的统计数据 我注意到只有两个 IP 地址 172 16 16 1 和 172 16 16 248 我用来确定 IP 地址的属性是 Request UserHostAddress IP地址信息丢失可能是什
  • 如何从 Vue.js 数组中删除项目

    我是 vue js 2 的新手 目前正在开发一个简单的事件应用程序 我已成功添加事件 但现在我想通过单击按钮来删除事件 HTML div class list group div class list group item h4 class
  • Python:无法在网页中使用selenium下载

    我的目的是从下载一个 zip 文件这是这个网页中的一个链接https www shareinvestor com prices price download html type price download all stocks bursa