Python 3.x 查找隐藏在网页中的文本
我确实发现了很多与我类似的帖子。但我尝试了很多建议,但似乎没有任何效果:( 我要刮的网页是 编辑:频道列在“国际覆盖”下拉列表下 我希望得到确切的频道显示在网页上与部分频道列表举行在下面一行 由于列表中的文本不完全匹配,我似乎无法使“包含”起作用 我知道我错过了一个小的调整,但这正是我被困的地方。我的变量t是阻碍我前进的因素。网页使用移动链接获取较少的页面信息 这是我的密码:Python 3.x 查找隐藏在网页中的文本,python-3.x,selenium,contains,Python 3.x,Selenium,Contains,我确实发现了很多与我类似的帖子。但我尝试了很多建议,但似乎没有任何效果:( 我要刮的网页是 编辑:频道列在“国际覆盖”下拉列表下 我希望得到确切的频道显示在网页上与部分频道列表举行在下面一行 由于列表中的文本不完全匹配,我似乎无法使“包含”起作用 我知道我错过了一个小的调整,但这正是我被困的地方。我的变量t是阻碍我前进的因素。网页使用移动链接获取较少的页面信息 这是我的密码: desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sport
desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sports' 'ESPN']
channelList = []
t = '//div[contains(@class="fll b_channel_name -broadcast b_trim_inner")]'
for i in range(len(desiredChannels)):
temp = desiredChannels[i]
search = browser.find_element_by_xpath(t).text
if temp in search:
channelList.append(search)
print(channelList)
非常感谢您的帮助我认为是您的类名中的空格导致了问题。请尝试以下方法
t = "div.fll.b_channel_name.-broadcast.b_trim_inner"
for i in range(len(desiredChannels)):
temp = desiredChannels[i]
search = browser.driver.find_element_by_css_selector(t).text
if temp in search:
channelList.append(search)
print(channelList)
首先,您的
Xpath
有点错误,所以我修改了它
第二件事是您要查找的元素是隐藏的
,因此您需要使用javaScript executor
来获取文本
第三,您总共有79个元素具有相同的classname
,因此我没有先计数,然后循环遍历元素。然后,只有您才能获得所需的输出
第四,我添加了webdriverwait
,以防webdriver
需要更长的时间来识别元素
desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sports', 'ESPN']
channelList = []
// collapse toggle
collapse_toggle = driver.find_element_by_css_selector('div.int_coverage > a[data-toggle]')
// expand all channels to make them visible, otherwise `.text` return empty string on invisible element
if collapse_toggle.get_attribute('class') == 'collapsed':
collapse_toggle.click();
channels = driver.find_elements_by_css_selector('div.int_coverage + div div.b_channel_name:not(.-country)')
for channel in channels:
channelName = channel.text
for desiredChannel in desiredChannels:
if channelName.find(desiredChannel) > -1:
channelList.append(channelName)
break
您需要使用以下导入
来处理代码
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
browser = webdriver.Chrome()
browser.get('https://m.livesoccertv.com/match/3018992/wolverhampton-wanderers-vs-arsenal/')
browser.maximize_window()
desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sports', 'ESPN']
channelList = []
t = '//div[@class="fll b_channel_name -broadcast b_trim_inner"]'
#channels=browser.find_elements_by_xpath(t)
channels=WebDriverWait(browser, 30).until(EC.presence_of_all_elements_located((By.XPATH, t)))
for search in channels:
searchtext=browser.execute_script("return arguments[0].innerHTML;", search)
for i in range(len(desiredChannels)):
temp = desiredChannels[i]
if temp in searchtext:
channelList.append(searchtext)
print(channelList)
输出:
['Watch ESPN Brasil']
希望这对您有所帮助。1)您应该使用find\u element\u xxxx()
获取所有频道,而不是只返回第一个匹配频道的find\u element\u xxx()
2) 你需要点击“国际报道”使频道可见,
.text
返回不可见元素上的空字符串
desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sports', 'ESPN']
channelList = []
// collapse toggle
collapse_toggle = driver.find_element_by_css_selector('div.int_coverage > a[data-toggle]')
// expand all channels to make them visible, otherwise `.text` return empty string on invisible element
if collapse_toggle.get_attribute('class') == 'collapsed':
collapse_toggle.click();
channels = driver.find_elements_by_css_selector('div.int_coverage + div div.b_channel_name:not(.-country)')
for channel in channels:
channelName = channel.text
for desiredChannel in desiredChannels:
if channelName.find(desiredChannel) > -1:
channelList.append(channelName)
break
您能否提供打印对账单的预期输出?谢谢,谢谢!我已经尝试了所有3个建议:)所有工作我的xpath到处都是。我不知道我要去哪里。谢谢