Попытка использовать Selenium для загрузки данных из Интернета и получение странной ошибки - PullRequest
0 голосов
/ 27 мая 2020

Вот код, который я тестирую.

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, но по какой-то причине они не очень хорошо работают вместе. Это мое предположение. Я застрял. Мысли? Предложения?

1 Ответ

2 голосов
/ 27 мая 2020

После вашего wd.get(url) сделайте это:

fpage=wd.page_source
fsoup = BeautifulSoup(fpage, 'html.parser')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...