如何在不使用网络浏览器的情况下在网页上请求/执行命令?

问题描述 投票:0回答:2

我正在尝试从 William Hill 网站获取足球比赛的评论。 为了获得它们,我需要 id="box_commentaries" 的子元素出现。

enter image description here

为了让它们出现,我需要模拟单击 class="_commentary"。

enter image description here

有两种方法可以实现:直接点击或者在控制台调用该函数。

enter image description here

我的问题是如何在不打开网络浏览器的情况下执行此操作?我不想打开网络浏览器,因为我每分钟都会同时收到数十场比赛的评论,而且我不想消耗太多内存,因为我需要做更多的事情。

我使用的功能是这样的:

(function() {
  setTimeout(function() {
    document.getElementsByClassName('_commentary')[0].click();
  }, 3000);
})();

要直接进入记分牌页面,只需点击此链接:

f'https://sports.whcdn.net/scoreboards/app/football/index.html?eventId={match_id}&sport=football&locale=en-gb&streamingAvailable=false&showSuggestions=true&expandDetails=true&showStreaming=false&referrer=https%3A%2F% 2Fsports.williamhill.com'

您只需将

match_id
更改为任何现场比赛的 id

enter image description here

例如: https://sports.whcdn.net/scoreboards/app/football/index.html?eventId=**28174073**&sport=football&locale=en-gb&streamingAvailable=false&showSuggestions=true&expandDetails=true&showStreaming=false&referrer=https%3A%2F% 2Fsports.williamhill.com

附注我知道如何使用 Selenium,并且用它编写的代码非常慢。现在我正在寻找其他方式来提出这个请求

javascript python html web-scraping
2个回答
1
投票

考虑使用 https://npmjs.org/package/jsdom

您需要对其进行设置,以便它加载脚本等,并且它可以模拟浏览器而无需运行无头/头浏览器。如果网站有很多 js 做一些通常不应该做的事情,那么它仍然有可能无法工作。


1
投票

据我所知,您可以使用 PuppeteerSelenium 来实现此目的。 Selenium 非常适合测试自动化方面。但在这种情况下,您可以将其用于您的用例。在

puppeteer
中,您可以指定上面的
headless
true
false
,如下所示:

  let browser = await puppeteer.launch({headless: true});
  const page = await browser.newPage();
  await page.goto('YOUR_SITE');

同样,在 Selenium 中您可以执行以下操作:

    WebDriverManager.chromedriver().setup();
    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.addArguments("--headless");
    driver = webdriver.Chrome(executable_path="./chromedriver",options=chrome_options)
    url = "your url here"
    driver.get(url)

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.