Очистка определенного c веб-сайта с окном поиска и javascripts в Python - PullRequest
0 голосов
/ 14 июля 2020

На сайте https://sray.arabesque.com/dashboard есть поле поиска «ввод» в html. Я хочу ввести название компании в поле поиска, выбрать первое предложение для этого имени в выпадающем меню (например, «Anglo American pl c»), go для URL-адреса с информацией об этой компании, загрузить javascripts, чтобы получить полную html версию полученной страницы, а затем очистить ее для получения G C Score, ESG Score, Temperature Score внизу.

!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
options.add_argument('-headless')
options.add_argument('-no-sandbox')
options.add_argument('-disable-dev-shm-usage')

wd = webdriver.Chrome('chromedriver',options=options)

companies = ['Anglo American plc']

for company in companies:
  # dryscrape.start_xvfb()
  # session = dryscrape.Session()
  # session.visit("https://srayapi.arabesque.com/api/sray/company/history/004BTP-E")
  resp = wd.get('https://sray.arabesque.com/dashboard/')
#print(driver.page_source)
  e = wd.find_element_by_id(id_='mat-input-0')
  e.send_keys(company)
  e.send_keys(Keys.ENTER)
  innerHTML = e.execute_script("return document.body.innerHTML")
  print(innerHTML)

Я не совсем понимаю, как посетите URL-адрес с информацией об Anglo American и очистите его, если мы не знаем URL-адрес после ввода названия компании в поле поиска.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Не зная, почему вы хотите использовать селен, воспользуйтесь поиском, а затем откройте другой сайт, вот что я бы сделал, чтобы получить данные, которые вы ищете:

import requests
import json

session = requests.Session()
url = 'https://srayapi.arabesque.com/api/sray/q'
response = session.get(url).json()

rays = response['data']['rays']
[ray for ray in rays if ray['name'].startswith('Anglo American')]

Затем делайте все, что вы хотите, поэтому для esg , g c и температура возможно:

myObj = [{result['name']: {'gc': result['gc'], 'esg': result['esg'], 'temp': result['score_near']}} for result in results]
0 голосов
/ 14 июля 2020

Вы можете сделать это с помощью селена. Пара вещей, которые вам нужно обновить.

При взаимодействии без головы вам необходимо предоставить window size.

Induce WebDriverWait (), чтобы избежать синхронизации выпуск.

Код :

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument('-headless')
options.add_argument('-no-sandbox')
options.add_argument('-disable-dev-shm-usage')
options.add_argument('window-size=1920,1080')

wd = webdriver.Chrome(options=options)

companies = ['Anglo American plc']

for company in companies:
  wd.get('https://sray.arabesque.com/dashboard/')
  WebDriverWait(wd, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[text()='list']"))).click()
  WebDriverWait(wd, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='mat-input-0']"))).send_keys(company)
  WebDriverWait(wd, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(.,' Anglo American plc ')]"))).click()
  WebDriverWait(wd, 20).until(EC.element_to_be_clickable((By.XPATH, "(//span[normalize-space(.)='Open dashboard'])[1]"))).click()
  WebDriverWait(wd,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"div.mat-tab-labels")))
  print(wd.find_element_by_xpath("//div[@class='mat-tab-label-content'][contains(.,'GC Score')]/span").text)
  print(wd.find_element_by_xpath("//div[@class='mat-tab-label-content'][contains(.,'ESG Score')]/span").text)
  print(wd.find_element_by_xpath("//div[@class='mat-tab-label-content'][contains(.,'Temp')]/span").text)

Вывод :

57.03
53.78
2.7°C


 
...