Поиск элемента ссылки в Selenium, который содержит определенное слово в его href с помощью python

Я пользователь Windows 7, использую python 3.6.7 и chromedriver 83.3. Мне нравится автоматизировать работу с помощью python, и недавно я запустил веб-автоматизацию с помощью селена. и хромированная отвертка. Так что я новичок в этой области.

Я написал сценарий, который может загружать любое программное обеспечение из Интернета после (потратив часы на учебные пособия и чтение документации) после ввода поискового запроса. Вот мой сценарий:

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
import requests, bs4

query = input("Name for a windows software: ")
searchGoogle = "https://www.google.com/search?q="+"download "+str(query)+" for windows 7"

driver = webdriver.Chrome('chromedriver.exe')

links = []
website = requests.get(searchGoogle)
website_text = website.text
soup = bs4.BeautifulSoup(website_text,"lxml")
all_links = []
for link in soup.find_all("a"):
    links.append(link.get("href"))
for link in links:
    if "/url?q=" in link:
        final = link.replace("/url?q=","")
        final = final.split("&", 1)[0]
        all_links.append(final)

for ss in all_links:
    try:
        driver.get(ss)
        time.sleep(30)
        download = driver.find_element_by_partial_link_text('Download')
        download.click()
        print(download.text)
        quit()
    except:
        #print(download.href)
        print("Not Found... Moving to next...")
        continue

проблема в том, что иногда он нажимает на ссылки с надписью «Загрузить» и переходит на другую страницу с запросом «Начать загрузку».

Я знаю, что когда вы загружаете exe-файл, ссылка для загрузки содержит что-то вроде этого: https://something.com/something/<▪something.exe

Поэтому я хотел спросить, есть ли find_element_if_its_href_contains ('. Exe') Или: все, что нажимает только ссылку, содержащую .exe.

Я новичок в этом сообществе и прошу прощения, если вы найдете в моем вопросе что-то, что не соответствует ожиданиям StackOverflow. Задайте мне вопрос в комментариях, и я буду рад изменить свой вопрос так, как вы предлагаете.

Кстати, заранее спасибо!


person Huzefa Usama    schedule 23.06.2020    source источник


Ответы (1)


Вы можете создать выражение xpath или css для сопоставления веб-элементов с href, содержащим строку .exe:

driver.find_element_by_xpath("//*[contains(@href,'.exe')]")
#or
driver.find_element_by_css_selector("[href*='.exe']")
person 0buz    schedule 23.06.2020