我一直试图从Facebook商业信息页面中删除电子邮件地址,例如: Facebook Business Page Example
但是在正确确定XPath时遇到了一些麻烦。后来我才知道Facebook的商业信息页面没有一致的xpath。 XPath因企业而异,这意味着我目前使用XPath的想法不会起作用。
经过一些html检查后,我确实在facebook商业信息页面上了解到,如果页面上有电子邮件,它将成为div中唯一具有" @的内容。 "符号。所以我的下一步是,"如果我能确定html中是否存在@符号怎么办?如果是的话,也许我可以从那个"中提取内容。这就是我现在所处的位置。我试图首先通过" @"确定电子邮件是否出现在页面上。符号,如果它存在,我想刮掉使用" @"的内容。符号。
我研究了以下方法:
email = driver.getPageSource().contains("@")
为了返回一个布尔值,关于@符号是否出现在页面上但是它没有用。
答案 0 :(得分:1)
不要刮。只需使用GraphQL API即可。这并不难,请使用pip
从GitHub安装facebook-sdk
package:
pip install git+https://github.com/pythonforfacebook/facebook-sdk.git
然后register and configure your app获取应用ID和密码,然后运行以下代码:
from facebook import GraphAPI
APP_ID = '<your_app_id>'
APP_SECRET = '<your_app_secret>'
graph = GraphAPI(version=2.5)
graph.access_token = graph.get_app_access_token(APP_ID, APP_SECRET)
# sequence of page ids you want to retrieve emails for
pages = ('page1_id', 'page2_id', 'page3_id')
objects = graph.get_objects(pages, fields='name,emails')
for page in objects.values():
print('{}: {}'.format(page['name'], ', '.join(page['emails'])))
这可以在您的Selenium应用旁边完成,无需进一步重组。
示例页面的演示:
>>> pages = ('alliancejjsandiego',)
>>> objects = graph.get_objects(pages, fields='emails,name')
>>> for page in objects.values():
... print('{}: {}'.format(page['name'], ', '.join(page['emails'])))
...
Alliance Jiu-Jitsu San Diego: info@alliancesandiego.com