请求。获取()函数与网络浏览器打开()功能

2024-09-19 23:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网址,我需要运行刷新发生。它将刷新数据缓存并在tableau服务器中显示最新上载的数据。url如下所示:

http://servername/views/workbookname/dashboard1?:refresh=yes

当我使用webbrowser库打开url时,会执行刷新,但会得到一个打开的浏览器。当我使用请求来获取url时,它不会刷新并给出200的响应,我认为这是成功的。你知道吗

有人知道为什么会这样吗?如何静默地使用webbrowser lib打开url并在之后关闭它,或者在执行get函数时让请求充当webbrowser?你知道吗

import webbrowser
url = 'http://servername/views/workbookname/dashboard1?:refresh=yes'
webbrowser.open(url)

import requests
url = "http://servername/views/workbookname/dashboard1?:refresh=yes"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36', "Upgrade-Insecure-Requests": "1","DNT": "1","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en-US,en;q=0.5","Accept-Encoding": "gzip, deflate"}
html = requests.get(url,headers=headers)
print(html)

Tags: 数据importhttpurlgethtmlrefreshviews
2条回答

requests.get()只返回“GET”请求之后从服务器接收的标记,而不需要任何进一步的客户端执行。你知道吗

而在浏览器环境中,可以在客户端javascript上完成更多的工作。我没有具体查看过您的页面,但是可能有某些javascript代码正在进行进一步的处理。你知道吗

你可以用硒来代替web browserrequests。您可以阅读更多关于它的信息here。你知道吗

Selenium允许您像使用浏览器一样浏览页面,但也允许您灵活地使用python代码在页面上自动执行+控制操作。你知道吗

您可以使用Selenium Chrome Webdriver在后台加载页面。(也可以使用Firefox驱动程序)。你知道吗

转到chrome://settings/help检查当前的chrome版本,并从here下载该版本的驱动程序。确保将驱动程序文件保存在PATH或与python脚本所在的文件夹中。你知道吗

试试这个:

from selenium.webdriver import Chrome # pip install selenium
from selenium.webdriver.chrome.options import Options

url = "http://servername/views/workbookname/dashboard1?:refresh=yes"

#Make it headless i.e. run in backgroud without opening chrome window
chrome_options = Options()  
chrome_options.add_argument(" headless")

# use Chrome to get page with javascript generated content
with Chrome(executable_path="./chromedriver", options=chrome_options) as browser:
     browser.get(url)
     page_source = browser.page_source

注意

当您打开URL时,webbrowser模块启动您的默认浏览器,该浏览器已经缓存了您的凭据/cookies。然而,如果您的URL需要任何身份验证或登录才能访问,那么您必须在使用selenium获取页面时提供这些信息。将每个selenium web驱动程序会话看作一个匿名的会话。Here这是一个如何用web驱动程序模拟登录的示例。你知道吗


参考文献:

selenium - chromedriver executable needs to be in PATH

浏览器打开的原因很简单,因为这就是网络浏览器打开()应该这样做,而不是发送HTTP请求,它打开浏览器并输入URL。一个可能的解决方案是使用selenium而不是webbrowser,因为当我查看它时,我还没有找到适合您使用的软件包的无头选项。所以这里是:

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

url = "<URL>"

chrome_options = Options()  
chrome_options.add_argument(" headless")

with Chrome(options=chrome_options) as browser:
     browser.get(url)

如果此解决方案不可接受,因为您需要使用webdriver而不是selenium,那么您需要找到一种将选项传递给浏览器实例的方法。我没有找到dir()或help()将此参数传递给webbrowser的方法,但是如果我找到了什么,我会添加它。你知道吗

相关问题 更多 >