【问题标题】:get value of atribute using Selenium python使用 Selenium python 获取属性值
【发布时间】:2018-11-08 02:02:46
【问题描述】:
我正在尝试获取推文“data-reply-to-users-json”的属性。但它似乎不起作用,有什么建议吗?我把我的代码和 twitter 的 html 结构。
*ps:加载更多推文时使用js进行推特搜索
Twitter Structure
以下是我已经在 python 中尝试过的内容
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
chrome_path = r"C:\Users\..\Desktop\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://twitter.com/search?q=bakar%20para%20cebong&src=typd")
time.sleep(1)
body = driver.find_element_by_tag_name('body')
for _ in range(5):
body.send_keys(Keys.PAGE_DOWN)
time.sleep(0.2)
time.sleep(1)
tweets = driver.find_elements_by_class_name('original-tweet')
for tweet in tweets:
print(tweet.get_property("data-tweet-id"))
【问题讨论】:
标签:
python
selenium-chromedriver
【解决方案1】:
另一种方法是使用Tweepy。它很容易使用。你需要一个推特账号。创建一个应用请求,获取访问密钥和 ID(这可能需要一段时间)。这是一种更合法的方式。第二个硒在 twitter 上抓取数据的速度很慢。
import tweepy
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) # you will get this once you register for the app
auth.set_access_token(access_token, access_token_secret) # you will get this once you register for the app
api = tweepy.API(auth)
public_tweets = api.home_timeline()
for tweet in public_tweets:
print tweet.text
【解决方案2】:
使用 BeautifulSoup 之类的库来完成这项任务会更好。
但如果你必须使用 selenium,那么你需要 get_attribute("attribute name") 函数。
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
chrome_path = r"C:\Users\..\Desktop\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://twitter.com/search?q=bakar%20para%20cebong&src=typd")
time.sleep(1)
body = driver.find_element_by_tag_name('body')
for _ in range(5):
body.send_keys(Keys.PAGE_DOWN)
time.sleep(0.2)
time.sleep(1)
tweets = driver.find_elements_by_class_name('original-tweet')
for tweet in tweets:
tweet_id = tweet.get_property("data-tweet-id")
reply_to_users_json = tweets.get_attribute("data-reply-to-users-json") # Added this line
print(some_stuff_like_tweet_id_or_reply_to_users_json)