在Selenium中查找链接元素,该元素在其href中包含一个特定的单词与python



我是使用 python 3.6.7 和 chromedriver83.3Windows 7用户 我喜欢用python自动化东西,最近开始使用selenium 和 chromedriver 实现网络自动化。所以我对这个领域很陌生。

我编写了一个脚本,可以在给它一个搜索查询之后从互联网上下载任何软件(花费数小时在教程和文档阅读上(。这是我的脚本:

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/某物.exe">

所以我想问是否有一个find_element_if_its_href_contains('.exe'(或者:任何只点击包含".exe"的链接的东西。

我是这个社区的新手,如果您在我的问题中发现任何不符合 StackOverflow 期望的内容,我深表歉意。在评论中问我,我很乐意按照您的建议更改我的问题。

顺便说一句,提前感谢!

您可以创建一个 xpath 或 css 表达式,以将 web 元素与包含字符串 ".exe" 的href匹配:

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

我使用硒ver.3.141.0,我也得到了另一种解决此问题的方法。
我只是想给出一些"部分"字符串并获取"整个"链接文本。代码如下:

all_links_by_keyword = driver.find_elements_by_partial_link_text(your_variables + 'any_string_you_need')

例如,如果您想查找带有"计算机"的链接,但页面有很多链接,包括"计算机",例如"computerV01","computerV02"...
然后你可以使用它来查找所有带有"计算机"关键字的链接。
示例代码:

getComputer = 'computer'
links = driver.find_elements_by_partial_link_text(getComputer + 'V')
for link in links:
print(link.get_attribute('href'))

希望它能帮助你。

相关内容

  • 没有找到相关文章

最新更新