I’m looking forward to getting what the title describes. I’ve already found the way to log in and get the photos of any profile that I search for. But when it comes to the comments or likes of any photo that I select, I cannot get them. By this, I mean that Chromedriver clicks on the photo for displaying it, and I would like, while the photo is displayed, to get just the number of likes (just the ones in blue) and the comments that are posted on that photo (right panel). I’m not finding any tutorial or post that helps (indeed I’ve searched a lot).
Here’s the way I’m looking for the photos, in case you need to see some of the code:
time.sleep(4) imagenes = [] for i in ['photos_of','photos_all']: driver.get("https:/www.facebook.com/userBasedOnURL/" + i + "/") time.sleep(3) n_scrolls = 3 for j in range(1, n_scrolls): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(3) anchors = driver.find_elements_by_tag_name('a') anchors = [a.get_attribute('href') for a in anchors] anchors = [a for a in anchors if str(a).startswith("https://www.facebook.com/photo")] #print(anchors) for a in anchors: driver.get(a) time.sleep(3) imagen = driver.find_elements_by_tag_name("img") #print(imagen) imagenes.append(imagen[0].get_attribute("src")) imagenes
Thanks in advance and pardon for my English.
Advertisement
Answer
The XPath to locate amount of likes under a photo in a photo viewer view is
//div[@aria-label="Photo Viewer"]//span[@class='pcp91wgn']
or in CSS selector syntax:
div[aria-label="Photo Viewer"] span[class="pcp91wgn"]
The comments there can be located with this CSS Selector
div[aria-label="Photo Viewer"] div[class="ecm0bbzt e5nlhep0 a8c37x1j"]
or with XPath syntax:
//div[@aria-label="Photo Viewer"]//div[@class="ecm0bbzt e5nlhep0 a8c37x1j"]
So you can iterate the list of links like this:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC photoview_comment_xpath = '//div[@aria-label="Photo Viewer"]//div[@class="ecm0bbzt e5nlhep0 a8c37x1j"]' photoview_likes_amount_css = 'div[aria-label="Photo Viewer"] span[class="pcp91wgn"]' likes = [] comments = [] for link in links: driver.get(link) like = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, photoview_likes_amount_css))).text.strip() like.append(like) comments_elements = driver.find_elements_by_xpath(photoview_comment_xpath) for comment in comments_elements: comments.append(comment.text.strip())
I don’t think you will find tutorial about each specific web site. What you have to learn here is how to find stable unique locators for the web elements, and XPath and css selectors syntax