Вот код, который я тестирую.
import csv
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.accept_untrusted_certs = True
import time
#browser = webdriver.Firefox(executable_path="C:/Utility/geckodriver.exe")
wd = webdriver.Firefox(executable_path="C:/Selenium/geckodriver.exe", firefox_profile=profile)
url = "https://finviz.com/login.ashx"
wd.get(url)
# set username
time.sleep(1)
username = wd.find_element_by_name("email")
username.send_keys("me@gmail.com")
#wd.find_element_by_id("identifierNext").click()
# set password
#time.sleep(2)
password = wd.find_element_by_name("password")
password.send_keys("me_pass")
# https://stackoverflow.com/questions/21350605/python-selenium-click-on-button
wd.find_element_by_css_selector('.button.is-primary.is-large').click()
# wait max 10 seconds until "theID" visible in Logged In page
time.sleep(5)
#content = wd.page_source
#print(BeautifulSoup(content, 'html.parser'))
url_base = "https://finviz.com/quote.ashx?t="
tckr = ['SBUX','MSFT','AAPL']
url_list = [url_base + s for s in tckr]
#print(url_list)
with open('C:\\stocks.csv', 'a', newline='') as f:
writer = csv.writer(f)
for url in url_list:
#print(url)
try:
wd.get(url)
fpage = wd.current_url
#print(fpage)
data = fpage.text
fsoup = BeautifulSoup(data, 'html.parser')
#print(url_base)
print(fsoup)
# write header row
writer.writerow(map(lambda e : e.text, fsoup.find_all('td', {'class':'snapshot-td2-cp'})))
# write body row
writer.writerow(map(lambda e : e.text, fsoup.find_all('td', {'class':'snapshot-td2'})))
except:
print("{} - not found".format(url))
В приведенном выше случае мой код переходит прямо к except
, потому что try
не работает. Я думаю, что проблема в этой строке:
fsoup = BeautifulSoup(data, 'html.parser')
Это моя ошибка:
AttributeError: 'str' object has no attribute 'text'
Я посмотрел здесь документацию:
https://www.selenium.dev/documentation/en/webdriver/web_element/
Думаю, webdriver
должен взаимодействовать с BeautifulSoup
, но по какой-то причине они не очень хорошо работают вместе. Это мое предположение. Я застрял. Мысли? Предложения?