driver = webdriver.Chrome('**************')
driver.get("https://www.youtube.com/results?search_query=youtube+keywords&sp=EgIQAQ%253D%253D")
user_data = driver.find_elements_by_xpath('//*[@id="video-title"]') <br>
links = []<br>
for i in user_data:<br>
links.append(i.get_attribute('href'))
df = pd.DataFrame(columns = ['v_search', 'v_id','v_comments'])
wait = WebDriverWait(driver, 10)
v_search = "Youtube Keyword"
for x in links[:1]:<br>
driver.get(x)<br>
v_id = x.strip('https://www.youtube.com/watch?v=')
### HERE IS MY QUESTION.
v_comments = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#count > yt-formatted-string"))).text
# Throw information in the dataframe we defined before (fills row per row).
df.loc[len(df)] = [v_search,v_id,v_comments]
sleep(0.5) #in seconds
下面的CSS选择器对我来说是有效的。
#count>.count-text.style-scope.ytd-comments-header-renderer
经测试像。
document.querySelector("#count>.count-text.style-scope.ytd-comments-header-renderer").innerHTML;
结果将是像--x评论。
PS:最好使用 visibility_of_element_located
预期条件。所以,你的情况,会是这样的。
from selenium.webdriver.common.keys import Keys
...
driver.find_element_by_tag_name("body").send_keys(Keys.PAGE_DOWN)
v_comments = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#count>.count-text.style-scope.ytd-comments-header-renderer"))).text
希望能帮到你
好吧,所以我想出了问题所在 如果有人在使用selenium时遇到同样的时间异常错误的话 我认为selenium的工作原理如下。驱动程序打开一个网站,寻找你要找的元素。在我的例子中,它是一个YouTube视频的评论数。如果你的元素在页面下方,你看不到它,那么硒可能就无法找到它。所以,我所做的是让驱动程序滚动到页面底部,等待几秒钟,使其加载。虽然这对一些人来说可能已经足够了,但在某些情况下我还是遇到了一些问题。因此,我也然后使它去了300(我假设屏幕像素大小),并等待它加载。如果这对你来说还是不行,可以考虑让硒在加载的时候移动一下鼠标,这样可以触发这个东西加载。
# we will make it rest for 5 seconds
SCROLL_PAUSE_TIME = 0.5
# scroll to the bottom
driver.execute_script("window.scrollTo(0, 1080)")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# scroll to the bottom
driver.execute_script("window.scrollTo(300, 1080)")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
另外,打开驱动窗口,这样你就可以看到它施展魔法了。这也可能使它提取信息。希望能帮到你。我很高兴能弄明白这个问题。