@websaz
@mohaligateway
@samanzdev
@rezajahangir
@Rp76
@juza66
من میخوام در یک سایت لاگین کنم اما نمیدونم چطوری در پایتون با کتابخانه Beautiful Soup
بگم که روی button کلیک کن
میشه راهنمایی کنید به چه شکلی میشه
اول باید ببینید API سایت چطور کار میکنه و به چه چیزی نیاز دارید
اگر captcha داره باید ببینید راهی برای bypass هست یا نه!
صفحه وب داینامیک هست یا استاتیک!
بعد از این موارد میتوانید ببینید که از چه نوع متود request ی استفاده کنید راحت تر هستید و انجام شدنی ه!
حال از BeautifulSoup میتونید به شکل زیر استفاده کنید:
URL = 'https://www.test.test/jobs/search/?user=test&password=xxxx'
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')
نمونه کد بالا HTTP Request با متود Get هستش
login_url = 'http://test.test/login'
data = {
'username': 'your_username',
'password': 'your_password'
}
with requests.Session() as s:
response = requests.post(login_url , data)
print(response.text)
index_page= s.get('http://test.test')
soup = BeautifulSoup(index_page.text, 'html.parser')
print(soup.title)
و این نمونه کد نیز برای متود post
ولی چیزی که شما سوال دارید مغایر با موارد بالاس
شما باید از headless web browser ها استفاده کنید تا کاری که میخواید رو انجام بدید
اگر میخواهید با پایتون account checker بسازید میتونم نمونه زیر رو بهتون پیشنهاد بدم که با requests پیاده سازی شده
Simple Checker By Python
*همینطور اگر هدفتون دریافت یه سری اطلاعات باشه هم از این روش میتونید ساتفاده کنید!
@none
راستیتش من میخوام این صفحه رو لاگین کنم
https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/
میشه راهنمایی کنید
@ftp
توی این سایت لاگین به صورت دو مرحله ای صورت میگیره
اول شماره یا نام کاربری وارد میشه:
url:https://www.digikala.com/users/login-register
method:post
data:
rc:randomstringinform
rd:randomstringinform
yourusername:login[emailphone]
بعد این مرحله به صفحه ای redirect میشی با url:
https://www.digikala.com/users/login/confirm/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6Ijk4OTM4MjEzNzIzNyJ9.P76oezeSbzwNahjQAFofUkx4ceDT48aXU8Q9PoLu0&type=loginbypassword&back=https://www.digikala.com/
که token هر دفعه تغییر میکنه پس باید این url رو دریافت کنی بعد باید با متود post اطلاعات زیر رو براش بفرستی:
rc:tokenfromform
rd:tokenfromform
login[password]:yourpassword
توضیحات:
rc و rd دو ورودی پنهان در form هستن که باید ارسال بشن و توی هر مرحله متفاوت ان!
برای انجامش اول باید یه صفحه برای login باز کنی و بعد rdوrc رو بگیری ازش و user مورد نظر رو هم وارد کنی و بفرستی url اول بعد url دوم و پارامتر های rcوrd بگیری بفرستی url دوم!(هر دو متود post)
تمام!
نیازی به headless web browser نیست
با دو تا curl و post request تمومه لاگین شدن!
ساده است و خوشبختانه captcha نداره 😏
یه چندبار با postman امتحان کن دستت میاد بعد برو توی پایتون پیاده اش کن
@ErfanSadeqiNejad
@none
چند تا نکته
۱- چطوری خودش میره به صفحه پسورد ؟
۲- توکن که هر دفعه تغییر میکنه رو چطوری باید گرفت؟
من از این کد ایتفاده کردم برای صفحه اول اما به صفحه دوم نمیره
from bs4 import BeautifulSoup
import re
import requests as req
params={"login[email_phone]":"n@gmail.com"}
url="https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/"
req1=req.post(url,data=params,headers={"Referer":"https://digikala.com/"})
soup=BeautifulSoup(req1.content,"html.parser")
res=soup.find_all(attrs={"name":["rc","rd"]})
res1=soup.find('button',class_=['o-btn o-btn--contained-red-lg c-login__form-action'])
num=[]
for each in res:
print(each['value'])
num.append(each['value'])
print(num)
print(res1)
@ftp
😐😐😐
شما یه درخواست post میفرسید که یه response داره دیگه
اون response توی header هاش ادرس url جدید رو داره و داخل body ه میاد rc و rd رو داره که پس از دریافت باید از url استفاده کنید و rcوrdوpass رو ارسال کنید بعد لاگین انجام میشه!
اصلا توی ارسال post کلیدی وجود نداره و نیاز ندارید!
شما ابتدا نیاز دارید با مفهوم request و طرز کار API ها و ساختار سایت ها آشنابشید!
@none
خوب مشکل من همینه الان من این کد رو میزنم دوباره همون صفحه رو در خروجی چاپ میکنه در header هم location یا url وجود نداره
from bs4 import BeautifulSoup
import re
import requests as req
params={"login[email_phone]":"netwons@gmail.com"}
url="https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/"
req1=req.post(url,data=params)
print(req1.text)
print(req1.headers)
@ftp
چون اصلا درست نیست کاری که انجام دادید!
ابتدا باید یم بار صفحه رو لود کنید و rc و rd رو بگیرید و همراه با email به همون url بفرستید!
بعد تو url ی که بر میگردونه هم همین کارو کنید!
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟