【发布时间】:2018-08-27 10:14:41
【问题描述】:
我正在使用 Selenium 和 Tkinter 为我的大学网站创建一个简单的搜索引擎。我的代码创建 GUI 并生成输入到搜索框中的查询的 URL 链接。是否可以将这些生成的 URL 作为 GUI 中的可点击超链接?如果是这样,我该怎么做?
import selenium.webdriver as webdriver
from selenium.webdriver.chrome.options import Options
from tkinter import *
def get_results(search_term, num_results = 10):
url = "https://www.startpage.com"
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
chromedriver = "chromedriver.exe"
args = ["hide_console", ]
browser = webdriver.Chrome(chromedriver, service_args = args, options =
options)
browser.get(url)
browser.set_window_position(0, 0)
browser.set_window_size(0, 0)
search_box = browser.find_element_by_id("query")
search_box.send_keys(search_term)
search_box.submit()
try:
links =
browser.find_elements_by_xpath("//ol[@class='web_regular_results']//h3//a")
except:
links = browser.find_elements_by_xpath("//h3//a")
results = []
for link in links[:num_results]:
href = link.get_attribute("href")
print(href)
results.append(href)
results.append(href)
mlabel2 = Label(mGui, text = href).pack()
browser.close()
return results
def search_query():
mtext = ment.get()
user_search = get_results(mtext + " site:essex.ac.uk")
return
response = get_results
mGui = Tk()
ment = StringVar()
mGui.geometry('640x640+0+0')
mGui.title('Essex University Search')
mlabel = Label(mGui, text = 'Essex University Search', font = ("arial", 40,
"bold"), fg = "steelblue").pack()
mbutton = Button(mGui, text = 'Search', command = search_query, font =
("arial", 10), fg = 'white', bg = 'steelblue').pack()
mEntry = Entry(mGui, textvariable = ment).pack()
【问题讨论】:
-
您是想让单个标签或文本像超链接一样工作,还是要将超链接嵌入到更大的标签或文本中?
-
我希望将超链接嵌入到标签内的 URL 中。我已将生成的最大 URL 数设置为 10
-
所以你想要一个看起来像这些 cmets 之一的标签 - 其中大部分文本是纯文本,但你的名字和你自己的评论后面的
edit看起来像链接并触发一些代码点击?这比让整个标签看起来像超链接要困难得多。 -
使用文本而不是标签,这仍然很困难,但有些工具可以为您完成大部分繁重的工作。
-
如果每个 url 被拆分成自己的文本框而不是标签会更容易吗?我已经实现将每个 url 放入自己的文本框中,但只是选择了一个标签,因为它看起来更整洁。但是,如果可以使每个文本框看起来和行为都像超链接,那么我会这样做。我很抱歉让它变得混乱,我对 Tkinter 和 GUI 的经验不是很丰富,哈哈
标签: python selenium tkinter hyperlink