当前位置: 首页 > 面试题库 >

通过Selenium在Facebook上解码类名称

莘俊能
2023-03-14
问题内容

我注意到,facebook有一些看起来很奇怪的类名,看起来是计算机生成的。我不知道这些类是否随着时间的推移至少是恒定的,或者它们是否在某个时间间隔内改变?也许有经验的人可以回答。我只能看到的是,当我退出Chrome并再次打开它时,它还是一样,因此至少它们不会更改每个浏览器会话。

因此,我猜想抓取Facebook的最好方法是在用户界面中使用某些元素并假定结构​​始终相同,例如,从About部分获取地址,如下所示:

from selenium import webdriver
driver = webdriver.Chrome("C:/chromedriver.exe")

driver.get("https://www.facebook.com/pg/Burma-Superstar-620442791345784/about/?ref=page_internal")
# wait some time
address_elements = driver.find_elements_by_xpath("//span[text()='FIND US']/../following-sibling::div//button[text()='Get Directions']/../../preceding-sibling::div[1]/div/span")
for item in address_elements:
    print item.text

问题答案:

你说得很对。Facebook是通过ReactJS构建的,这在HTML
DOM中
以下 关键字标签
的存在中非常明显:

  • {"react_render":true,"reflow":true}
  • <!-- react-mount-point-unstable -->
  • ["React-prod"]
  • ["ReactDOM-prod"]
  • ReactComposerTaggerType:{r:["t5r69"],be:1}

因此,动态生成的 类名称 一定会在一定的时间 间隔更改

解决方案是使用 静态 属性构造 动态的
定位器策略。

只获得文字下方的地址的第一行 找到我们
需要引起WebDriverWait连同expected_conditions因为visibility_of_element_located()你可以用下面的优化解决方案:

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[normalize-space()='FIND US']//following::span[2]"))))

奥托罗

注意 :报废 Facebook
违反了3.2.3节的服务条款,您可能会受到质疑,甚至可能进入Facebook监狱。使用
Facebook Graph API
代替。



 类似资料:
  • 我有一个Facebook页面,我正在尝试上传一个已经托管在我的服务器上的视频。我需要通过javascript来做到这一点,我所拥有的只是视频的src链接(类似于 )。作为管理员,我拥有所有必需的权限()。 facebook api说我必须以的形式发送数据,这意味着视频内容。为了通过ajax实现这一点,我在stackoverflow上回答了这个问题,并学习了如何在jQuery中使用ajax请求发送F

  • 我还尝试使用CSSSelector: 但WebDriver不断抛出一个异常,说明它无法找到该元素。有什么建议可以是什么问题吗?

  • 我的密码是。 此代码总是提供用户为空。.我有使用最新的是 和是: 我还使用了Android Studio。单击按钮时调用此方法此方法为“工作”,表示facebook弹出窗口已打开,但它始终提供用户为空。此给定的is用户为空,但刷新后不为空。

  • 问题内容: 我尝试使用我从已经发布的问题的答案中读取的这些行登录我的Facebook帐户,但无论如何我都无法登录!我正在寻找一些更正代码的提示: PS:不,我不想使用Facebook API! 问题答案: 在请求中传递了许多其他参数: 并且不要忘记参数。Facebook可能会为登录请求提供某种一次性令牌,以防止绕过Facebook API。

  • 我在用硒和python做蜘蛛。 网页的一部分是这样的: 我需要找到href并单击。 另外,我读过这个问题:使用Selenium Webdriver单击超链接 但它不能帮助我,因为在我的例子中,有一个,而不仅仅是一个简单的文本。

  • 我正在编写一个Python程序,该程序使用Selenium导航到高级搜索页面上的搜索框中并在搜索框中输入信息。本网站使用 Javascript,每次加载网站时,每个搜索框的 ID 和名称都会略有变化,但类名保持不变。类名经常被重用,所以我的目标是使用然后通过该列表编制索引。 例如,一个框的类名是 ,但我不能使用它,因为 selenium 认为它是一个复合类名并抛出一个错误。如果我只使用它的一部分,

  • 我一直在尝试在网页上查找一个元素,该元素与其他元素同名,没有id。它确实有不同的值,因此我希望通过名称和值查找该元素。 在我的网页我有一个搜索按钮: 我不能使用name,因为我有另一个具有相同名称和类型的元素: 因此,我尝试使用xpath,我开始使用xpath检查器返回返回的xpath: 这又是一个非常新的,但我假设“x:”不应该在路径中,所以我删除了这个,并试图找到以下元素: 这导致: 所以我真