因此,正如标题所示,我正在尝试使用PhantomJS通过python 3.7中的硒获得直接下载文件的链接
我正在工作的站点是emuparadise.me,添加cookie以避免出现“无效引荐来源”错误后,我正在下载一个对此link有要求的rom文件。发出请求后,browser.current_url
显示about:blank
,并且我知道通过检查PhantomJS的网络使用情况,文件已开始下载。现在已经浏览了互联网超过3个小时,我还没有找到任何方法来获取下载文件的网址。
我对解决方案的想法之一是创建一个线程来跟踪对browser.current_url
的更改,但是似乎browser
在发出请求时被锁定了
这是我当前的代码:
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.add_cookie({'name': 'refexception', 'value': 1, 'domain': '.emuparadise.me', 'path': '/'})
browser.get("https://www.emuparadise.me/roms/get-download.php?gid=154652&test=true")
请注意,我根本不关心文件的下载,我也不知道也不需要知道文件的下载位置。我已经从firefox中找到了该特定示例文件的实际link,以防您需要进行测试。我真的更喜欢在Firefox或Chrome网络驱动程序上使用PhantomJS来完成如此简单的任务。任何帮助将不胜感激。
答案 0 :(得分:0)
php页面正在提供文件。您无法在客户端获取路径或真实文件名。 (添加:现在,我重新阅读了您的问题,我想您确实已经获得了链接客户端!!您每天都会学到一些新知识!但是,Selenium除了DOM之外没有访问权限。)
答案 1 :(得分:0)
所以我终于想到了解决方案。由于我知道下载URL必须在请求标头中的某处,因此我寻找了一种查看PhantomJS的方法。确实,这很容易。我所做的只是将日志级别从INFO
(默认)更改为DEBUG
,并且标头出现在事件page.onResourceRequested
和page.onResourceReceived
下的日志文件中。发出请求后,我只是解析日志文件以查找后一个事件并抓取URL。这是完整的代码:
from selenium import webdriver
from json import loads
def get_url_for_game(download_url):
browser = webdriver.PhantomJS(service_args=["--webdriver-loglevel=DEBUG"])
browser.add_cookie({'name': 'refexception', 'value': 1, 'domain': '.emuparadise.me', 'path': '/'})
browser.get(download_url)
direct_download_url = None
with open('ghostdriver.log') as logs:
for line in logs:
_, _, event, event_data = line.split(" - ")
if event == "page.onResourceReceived":
event_data = loads(event_data)
if event_data['contentType'] == "application/octet-stream":
direct_download_url = event_data['url']
browser.quit()
return direct_download_url
print(get_url_for_game("https://www.emuparadise.me/roms/get-download.php?gid=154652&test=true"))