Я пытаюсь создать веб-сканер, чтобы получать трендовые акции со страницы TSX.В настоящее время я получаю все трендовые ссылки, теперь я пытаюсь собрать информацию на отдельных страницах.Исходя из моего кода, когда я пытаюсь вывести «quote_wrapper» в getStockDetails (), он возвращает пустой список.Я подозреваю, что это потому, что JavaScript еще не отображался на странице?Не уверен, что это так.Во всяком случае, я попытался вывести все HTML на странице для отладки, и я тоже не вижу его.Я прочитал, что единственный способ «визуализировать» JavaScript - это использовать Selenium и использовать browser.execute_script («return document.documentElement.outerHTML»).Это работало на индексной странице, поэтому я попытался использовать его на других.Я также сделал комментарий об этом в коде.Спасибо за вашу помощь, если можете.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as soup
from urllib2 import urlopen as uReq
import time
import random
import requests
def getTrendingQuotes(source_code):
# grabs all the trending quotes for that day
links = []
page_soup = soup(source_code, "lxml")
trendingQuotes = page_soup.findAll("div", {"id": "trendingQuotes"})
all_trendingQuotes = trendingQuotes[0].findAll('a')
for link in all_trendingQuotes:
url = link.get('href')
name = link.text
# print(name)
links.append(url)
return links
def getStockDetails(url, browser):
print(url)
source_code = browser.execute_script(
"return document.documentElement.outerHTML")
#What is the correct syntax here?
#I'm trying to get the innerHTML of whole page in selenium driver
#It seems I can only access the JavaScript for the entire page this way
# source_code = browser.execute_script(
# "return" + url +".documentElement.outerHTML")
page_soup = soup(source_code, "html.parser")
# print(page_soup)
quote_wrapper = page_soup.findAll("div", {"class": "quoteWrapper"})
print(quote_wrapper)
def trendingBot(browser):
while True:
source_code = browser.execute_script(
"return document.documentElement.outerHTML")
trending = getTrendingQuotes(source_code)
for trend in trending:
browser.get(trend)
getStockDetails(trend, browser)
break
# print(trend)
def Main():
url = 'https://www.tmxmoney.com/en/index.html'
browser = webdriver.Chrome(
r"C:\Users\austi\OneDrive\Desktop\chromeDriver\chromedriver_win32\chromedriver.exe")
browser.get(url)
print("[+] Success! Bot Starting!")
trendingBot(browser)
browser.quit()
if __name__ == "__main__":
Main()