Как распечатать открытую ссылку PDF с использованием Selenium в Python? - PullRequest
0 голосов
/ 03 июня 2019

Я не могу напечатать ссылку окончательного PDF-файла, которая открывается после выполнения заданного кода

from selenium import webdriver
from selenium.webdriver.support import ui
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException 

def page_is_loaded(driver):
    return driver.find_element_by_tag_name("body")!= None


def check_exists_by_text(text):
    try:
        driver.find_element_by_link_text(text)
    except NoSuchElementException:
        return False
    return True

driver = webdriver.Chrome("C:/Users/Roshan/Desktop/sbi/chromedriver")
driver.maximize_window()
driver.get("http://www.careratings.com/brief-rationale.aspx")

wait = ui.WebDriverWait(driver,10)
wait.until(page_is_loaded)

location_field = driver.find_element_by_name("txtfromdate")
location_field.send_keys("2019-05-06")

last_date = driver.find_element_by_name("txttodate")
last_date.send_keys("2019-05-21")

driver.find_element_by_xpath("//input[@name='btn_submit']").click()

if check_exists_by_text('Reliance Capital Limited'):
    elm =driver.find_element_by_link_text('Reliance Capital Limited')
    driver.implicitly_wait(5)
    elm.click()
    driver.implicitly_wait(50)
    #time.sleep(5)
    #driver.quit()
else :
    print("Company is not rated in the given Date range")

Я ожидаю, что фактический вывод является ссылкой этого PDF-файла:

"http://www.careratings.com/upload/CompanyFiles/PR/Reliance%20Capital%20Ltd.-05-18-2019.pdf"

но я не знаю, как напечатать эту ссылку

Ответы [ 3 ]

0 голосов
/ 03 июня 2019

Я бы сказал, что вам просто нужно поставить эту строку:

pdf_link = elm.get_attribute("href")
0 голосов
/ 03 июня 2019

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

enter image description here

Попробуйте следующий скрипт:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = "http://www.careratings.com/brief-rationale.aspx"

with webdriver.Chrome() as driver:
    driver.get(url)
    wait = WebDriverWait(driver,10)

    location_field = wait.until(EC.presence_of_element_located((By.NAME, "txtfromdate")))
    location_field.send_keys("2019-05-06")

    last_date = wait.until(EC.presence_of_element_located((By.NAME, "txttodate")))
    last_date.send_keys("2019-05-21")

    input_search = wait.until(EC.presence_of_element_located((By.NAME, "txtSearchCompany_brief")))
    input_search.send_keys('Reliance Capital Limited')

    time.sleep(3) #could not get rid of this hardcoded delay to make the script work

    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"[onclick*='Reliance Capital Limited']"))).click()

    # time.sleep(2) #activate this line in case the script behaves otherwise

    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"input[name='btn_submit']"))).click()
    for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"table tr td > a[href$='.pdf']"))):
        print(item.get_attribute("href"))
0 голосов
/ 03 июня 2019

Вам нужно найти все элементы в таблице, а затем извлечь из них данные.

from selenium import webdriver
import os

# setup path to chrome driver
chrome_driver = os.getcwd() + '/chromedriver'
# initialise chrome driver
browser = webdriver.Chrome(chrome_driver)
# load url
browser.get('http://www.careratings.com/brief-rationale.aspx')

# setup date range
location_field = browser.find_element_by_name("txtfromdate")
location_field.send_keys("2019-05-06")
last_date = browser.find_element_by_name("txttodate")
last_date.send_keys("2019-05-21")
browser.find_element_by_xpath("//input[@name='btn_submit']").click()

# get all data rows
content = browser.find_elements_by_xpath('//*[@id="divManagementSpeak"]/table/tbody/tr/td/a')

# get text and href link from each element
collected_data = []
for item in content:
    url = item.get_attribute("href")
    description = item.get_attribute("innerText")
    collected_data.append((url, description ))

Выход:

('http://www.careratings.com/upload/CompanyFiles/PR/Ashwini%20Frozen%20Foods-05-21-2019.pdf', 'Ashwini Frozen Foods')
('http://www.careratings.com/upload/CompanyFiles/PR/Vanita%20Cold%20Storage-05-21-2019.pdf', 'Vanita Cold Storage') 

и т. Д.

...